This analysis was prepared by Francisco Arrieta and Jonathan Edwards.


General Setup

# options(scipen=999) #prevent scientific notation
# options(scipen=-999) #encourage scientific notation
options(scipen=0) #encourage scientific notation neutral?

Libraries

# modelling
library(psych) #factor analysis tools (PAF PAF)
library(lavaan) #causal analysis
library(lm.beta) # add standarized regression coeffs

# stats
library(nortest) #Kolmogorov-Smirnov-Test
library(corrplot) #correlation matrix plot
library(olsrr)  #VIF and Tolerance Values
library(pastecs) # provides function stat.desc
library(REdaS) #Bartelett's Test

# plotting & formatting
library(ggplot2) #better graphs
library(patchwork) # provides wrap_plots for multiplotting 
# library(gridExtra) #provides multiplotting functionality
# library(ggpubr) #provides ggarrange for multiplotting (patchwork better though)
library(semPlot) #for visualization of path diagrams (SEM)
library(lavaanPlot) #for visualization of path diagrams (SEM)
# library(rcompanion)   #Histogram and Normal Curve
library(kableExtra) #makes nice tables

# generic
library(dplyr) #useful data manip functions like arrange, distinct, rename etc included in fpp3
library(stringr) # provides string manip functions like str_split_fixed 
library(Hmisc) #describe function that describes features of dataframes
library(data.table) # creating and manipulating datatables
library(knitr) #rmarkdown tools not sure why useful
library(parameters) #get model outputs in table form (good for making tabs)

Formatting

Tables

# kable table layout options
# do not display NAs and only 2 digits
opts <- options(knitr.kable.NA = '') #knitr.table.format = "latex"

# define table styling options
stable <- function(data, digits = 2, caption="") {
  knitr::kable(data, digits=digits, caption=caption) |> 
    # kable_styling(c("striped", "condensed"))
    kable_paper(full_width = T)
}

Functions in alphabetical order

f_AVE

f_AVE <- function(lambda, theta){
  
  results <- data.frame()
  
  # create lambda matrix with ones instead of std.all
  ones <- lambda
  ones[ones>0] <- 1
  
  # a matrix with dimensions of lambda matrix but with lambdas replaced by thetas
  theta_lb <- theta %*% ones
  
  # calculate Average Variance Extracted (should be above .5)
  AVE <- (t(lambda) %*% lambda) / (t(lambda) %*% lambda + t(theta_lb) %*% ones )
  
  # replace all values satisfying condition with NaN for visibility
  AVE_fail <- AVE
  AVE_fail[AVE_fail>.5] <- NaN
  
  # test result
  
  if (length(AVE_fail[!is.na(AVE_fail)])>0){
      results["Average Variance Extracted","Result"] <- "Fail"
    } else {
      results["Average Variance Extracted","Result"] <- "Pass"
    }
  
    kbl <- results |> 
      stable() |>
      row_spec(which(results[,"Result"]=="Pass"), bold = T, color = "white", background = "#78BE20") |>
      row_spec(which(results[,"Result"]=="Fail"), bold = T, color = "white", background = "red")
  
  return(list(kbl,AVE,AVE_fail))
}

f_bartlett

f_bartlett <- function(data){

  brt <- bart_spher(data)
  
  test_selection = c("p.value","X2")
  results <- data.frame(Value=as.numeric(brt[test_selection]))
  rownames(results) <- c("pvalue", "chisq")
  
    # bartlett's test (p-value < 0.5)
  if (results["pvalue","Value"] < 0.05){
      results["pvalue","Result"] <- "PASS"
    } else {
      results["pvalue","Result"] <- "FAIL"
    }
  
  kbl <- results |> 
    stable(3) |>
    row_spec(which(results[,"Result"]=="PASS"), bold = T, color = "white", background = "#78BE20") |>
    row_spec(which(results[,"Result"]=="FAIL"), bold = T, color = "white", background = "red")
  
  return(list(kbl, brt))

}

f_communality

# communalities (exclude variables if < 0.3)
f_communality <- function(fit){
  
    communality <- data.table("Item"=names(fit$communality), 
                             "Communality"=as.numeric(fit$communality))

    # Sort table
    communality <- communality |>
      setorder(cols = "Communality")
    
    # Display table
    kbl <- communality |> 
              stable(caption=paste0("Communality for function \"",fit$fn  ,"\" with rotation \"", fit$rotation, "\" and ", fit$factors, " factors")) |>
              row_spec(which(communality[,1]<.3), bold = T, color = "white", background = "red")
    
    kbl 
}

f_communality_load

# test to see if function calculates communality from loadings
f_communality_load <- function(fit){
 
  communality_calc <- numeric()
  for (i in 1:nrow(fit$loadings)){
    
    # test communality calculation
    variableloading = fit$loadings[i,] # loadings 1st variable
    communality_calc[i] = sum(variableloading^2)
    names(communality_calc)[i] <- names(fit$loadings[,1])[i]
    # print(paste0("Communality for ", names(fit$loadings[,1])[i]," = ", communality_calc[i]))
    
  }
  
    communality <- data.table("Item"=names(communality_calc), 
                             "Communality"=as.numeric(communality_calc))

    # Sort table
    communality <- communality |>
      setorder(cols = "Communality")
    
    # Display table
    kbl <- communality |> 
              stable(caption=paste0("Test - Communality calculated from loadings for function \"",fit$fn  ,"\" with rotation \"", fit$rotation, "\" and ", fit$factors, " factors")) |>
              row_spec(which(communality[,1]<.3), bold = T, color = "white", background = "red")
    
    kbl   
}

f_construct_corr

f_construct_corr <- function(psi){
  
  results <- data.frame()
  
  # correlations between constructs (factors...) should be lower than .7
  # replace all values satisfying condition with Fail" for visibility
  psi_fail <- psi
  psi_fail[psi_fail<.7] <- NaN

  # replace diagonal of psi matrix with NA
  diag(psi_fail) <- NaN
  
  # test result
  
  if (length(psi_fail[!is.na(psi_fail)])>0){
      results["Construct Correlations","Result"] <- "Fail"
    } else {
      results["Construct Correlations","Result"] <- "Pass"
    }
  
    kbl <- results |> 
      stable() |>
      row_spec(which(results[,"Result"]=="Pass"), bold = T, color = "white", background = "#78BE20") |>
      row_spec(which(results[,"Result"]=="Fail"), bold = T, color = "white", background = "red")
  
  return(list(kbl,psi,psi_fail))
}

f_construct_rel

f_construct_rel <- function(lambda, theta){
  
  results <- data.frame()
  
  # create lambda matrix with ones instead of std.all
  ones <- lambda
  ones[ones>0] <- 1
  
  # a matrix with dimensions of lambda matrix but with lambdas replaced by thetas
  theta_lb <- theta %*% ones
  
  # calculate construct reliability (should be above .6)
  constrrel <- (t(lambda) %*% ones)^2 / ((t(lambda) %*% ones)^2 + t(theta_lb) %*% ones )
  
  # replace all values satisfying condition with NaN for visibility
  constrrel_fail <- constrrel
  constrrel_fail[constrrel_fail>.6] <- NaN
  
  # test result
  
  if (length(constrrel_fail[!is.na(constrrel_fail)])>0){
      results["Construct Reliability","Result"] <- "Fail"
    } else {
      results["Construct Reliability","Result"] <- "Pass"
    }
  
    kbl <- results |> 
      stable() |>
      row_spec(which(results[,"Result"]=="Pass"), bold = T, color = "white", background = "#78BE20") |>
      row_spec(which(results[,"Result"]=="Fail"), bold = T, color = "white", background = "red")
  
  return(list(kbl,constrrel,constrrel_fail))
}

f_corr_matrix

#plot correlation matrix adjusting parameters to see previously identified groupings
f_corr_matrix <- function(data){
corr_matrix <- cor(data)
corrplot(as.matrix(corr_matrix), 
         method = "color", #col = c("white","white","white","white","white", "lightgrey", "darkgrey", "black"),
         order = "hclust", addrect = 10, rect.col="black", # rect.col="red",
         addCoef.col = 'black', number.cex = .5,
         tl.col ="black", 
         tl.cex = 0.80, 
         )
}

f_eigenvalue_load

f_eigenvalue_load <- function(fit){

  Eigenvalue <- numeric()
  for (i in 1:ncol(fit$loadings)){
  
    # test eigenvalue calculation
    factorloadings = fit$loadings[,i] # loadings 1st factor (default is nfactors = 1)
    Eigenvalue[i] = sum(factorloadings^2)
    # print(paste0("Eigenvalue factor ",names(fit$loadings[1,])[i] ," = ", Eigenvalue))
    
  }
Eigenvalue
}

f_factor_interp

f_factor_interp <- function(fit, labels, f_interp_list){
  
 # create a dataframe which lists the variables in one column and in the other the factor on which they load most (the max)
Im_factor <- data.frame(
  Variable = rownames(fit$loadings),
  Loads_on = colnames(fit$loadings)[max.col(fit$loadings)]
  )

# merge the labels data and the factor loaded on data
factor_interp <- merge(labels, Im_factor, by = 'Variable', all.x=T, all.y=F)

# select only the images (all variables containing "Im")
factor_interp <- factor_interp[grep("Im",factor_interp$Variable),] 

# order by factor
setorder(factor_interp, Loads_on)

# add a column with the interpretations

factor_interp["Interpretation"] <- "excluded"

for (k in seq_along(f_interp_list)){
  
  factor_interp["Interpretation"][factor_interp["Loads_on"]==names(f_interp_list[k])] <- f_interp_list[k]
  
}

kbl <- data.table(factor_interp[c("Variable", "Label_short", "Loads_on","Interpretation")]) |>
  stable() 

kbl
}

f_fornell_larcker

f_fornell_larcker <- function(psi, AVE){
  
  results <- data.frame()
  
  #psi matrix squared
  psi2 <- psi^2
  
  # replace diagonal of psi matrix with AVE values
  diag(psi2) <- diag(AVE)
  
  # create matrix with columns filled with AVE
  AVE_full <- AVE
  AVE_full[is.na(AVE_full)] <- 0 #replace NAs with 0s
  AVE_full <- AVE_full^0 %*% AVE_full # multiply a matrix full of ones with AVE_full to get columns filled with AVE
  
  # AVE should be higher than squared correlations between constructs
  # substract matrices any psi bigger than AVE will be negative
  AVEpsi_fail <- AVE_full - psi2
  # AVE_full - psi2
  AVEpsi_fail[AVEpsi_fail >= 0] <- NaN
  
  # test result
  
  if (length(AVEpsi_fail[!is.na(AVEpsi_fail)])>0){
      results["Fornell-Larcker Criteria","Result"] <- "Fail"
    } else {
      results["Fornell-Larcker Criteria","Result"] <- "Pass"
    }
  
    kbl <- results |> 
      stable() |>
      row_spec(which(results[,"Result"]=="Pass"), bold = T, color = "white", background = "#78BE20") |>
      row_spec(which(results[,"Result"]=="Fail"), bold = T, color = "white", background = "red")
     
  return(list(kbl,psi2,AVEpsi_fail))
}

f_global_fit_measures

f_global_fit_measures <- function(fit){
    
  sum <- summary(fit, fit.measures=TRUE, standardized=TRUE)
  
  test_selection = c("pvalue","chisq","cfi", "rmsea")
  results <- data.frame(Value=sum$fit[test_selection])
  
  #chi squared pvalue
  if (results["pvalue","Value"] > 0.05){
      results["pvalue","Result"] <- "PASS"
      results["pvalue","Result_bool"] <- 2
    } else {
      results["pvalue","Result"] <- "FAIL"
      results["pvalue","Result_bool"] <- 0
    }
  
  #chi squared
  results["chisq","Result"] <- "-"
  
  #CFI
  if (results["cfi","Value"] < 0.9){
      results["cfi","Result"] <- "Definitely reject the model"
      results["cfi","Result_bool"] <- 0
    } else if (results["cfi","Value"]>0.95) {
      results["cfi","Result"] <- "Accept model"
      results["cfi","Result_bool"] <- 2
    } else {
      results["cfi","Result"] <- "High under-rejection rate"
      results["cfi","Result_bool"] <- 1
    }
  
  #RMSEA
  if (results["rmsea","Value"] <= 0.05){
      results["rmsea","Result"] <- "Good fit"
      results["rmsea","Result_bool"] <- 2
    } else if (results["rmsea","Value"] <= 0.08 | results["rmsea","Value"] > 0.05) {
      results["rmsea","Result"] <- "Acceptable fit"
      results["rmsea","Result_bool"] <- 1
    } else if (results["rmsea","Value"] <= 0.1 | results["rmsea","Value"] > 0.08) {
      results["rmsea","Result"] <- "Bad fit"
      results["rmsea","Result_bool"] <- 0
    } else {
      results["rmsea","Result"] <- "Unacceptable fit"
      results["rmsea","Result_bool"] <- 0
    }

  kbl <- results |> 
    stable(3) |>
    row_spec(which(results[,"Result_bool"]==2), bold = T, color = "white", background = "#78BE20") |>
    row_spec(which(results[,"Result_bool"]==1), bold = T, color = "white", background = "orange") |>
    row_spec(which(results[,"Result_bool"]==0), bold = T, color = "white", background = "red")
  
  return(list(remove_column(kbl, 4), sum))
}

f_indic_rel

f_indic_rel <- function(lambda, theta){
  
  results <- data.frame()
  
  # create lambda matrix with ones instead of std.all
  ones <- lambda
  ones[ones>0] <- 1
  
  # a matrix with dimensions of lambda matrix but with lambdas replaced by thetas
  theta_lb <- theta %*% ones
  
  # calculate indicator reliabilities (should be larger than 0.4)
  indicrel <- lambda^2/(lambda^2 + theta_lb)
  # indicrel
  
  # replace all values satisfying condition with NaN for visibility
  indicrel_fail <- indicrel
  indicrel_fail[indicrel_fail>.4] <- NaN
  
  # test result
  
  if (length(indicrel_fail[!is.na(indicrel_fail)])>0){
      results["Individual Item Reliability","Result"] <- "Fail"
    } else {
      results["Individual Item Reliability","Result"] <- "Pass"
    }
  
    kbl <- results |> 
      stable() |>
      row_spec(which(results[,"Result"]=="Pass"), bold = T, color = "white", background = "#78BE20") |>
      row_spec(which(results[,"Result"]=="Fail"), bold = T, color = "white", background = "red")
  
  return(list(kbl,indicrel,indicrel_fail))
}

f_kaiser

f_kaiser <- function(fit){

  #kaiser criterion (retain factors with eigenvalues >1)
  fit_kaiser_nb <- length(which(fit$e.values > 1))
  print(paste0("Kaiser number = ",fit_kaiser_nb))
  
}

f_KMO

f_KMO <- function(data){

# KMO > 0.6
KMOTEST=KMOS(data_img_EFA)
# print(KMOTEST, sort=T)
KMO <- KMOTEST$KMO

results <- data.frame(Value=KMO)
rownames(results) <- "KMO"
  
    # KMO > 0.6
  if (results["KMO","Value"] > 0.6){
      results["KMO","Result"] <- "PASS"
    } else {
      results["KMO","Result"] <- "FAIL"
    }
  
  kbl <- results |> 
    stable(3) |>
    row_spec(which(results[,"Result"]=="PASS"), bold = T, color = "white", background = "#78BE20") |>
    row_spec(which(results[,"Result"]=="FAIL"), bold = T, color = "white", background = "red")
  
  return(kbl)
  
}

f_loadings

# factor loading functions
f_loadings <- function(fit){
 
      # print(fit$loadings, cutoff=0.3)
      # print(print_html(model_parameters(fit, loadings=T, threshold = 0.3, summary=T))) 

      kbl <- model_parameters(fit, loadings=T, threshold = 0.3, summary=T) |>
        stable()
      kbl
}

f_MSA

f_MSA <- function(data){

  KMOTEST=KMOS(data)
  # Anti-image Correlation (MSA > 0.5)
  MSA_list <- data.table("Item"=names(KMOTEST$MSA), "MSA"=as.numeric(KMOTEST$MSA))
  
  # Sort table
  MSA_list<- MSA_list |> 
    setorder(cols = "MSA")
  
  # Display table
  kbl_MSA <- MSA_list |> 
          stable(3) |>
          row_spec(which(MSA_list[,2]<0.5), bold = T, color = "white", background = "red")
  
  kbl_MSA
  
}

f_PAFn

# create multiple paf's with different number of factors
f_PAFn <- function(data, nf=1, rotation){
  
  # perform multiple PAFs one for each factor number in selection
  PAFn = list()
  
  i=1
  for (n in nf) {
    PAFn[[i]] <- psych::fa(data, rotate=rotation, scores=TRUE, nfactors = n)
    i=i+1
  }
  names(PAFn) <- nf
  
  PAFn
}

f_PCAn

# create multiple paf's with different number of factors
f_PCAn <- function(data, nf=1, rotation){
  
  # perform multiple PAFs one for each factor number in selection
  PCAn = list()
  
  i=1
  for (n in nf) {
    PCAn[[i]] <- psych::principal(data, rotate=rotation, scores=TRUE, nfactors = n)
    i=i+1
  }
  names(PCAn) <- nf
  
  PCAn
}

f_scree

f_scree <- function(fit){
  
  #display Scree-plot (retain factors before elbow)
  plot(fit$e.values,xlab="Factor Number",
       ylab="Eigenvalue",
       main="Scree plot",
       cex.lab=1.2,
       cex.axis=1.2,
       cex.main=1.8,
       col = "#0099F8",
       pch = 19) 
  abline(h=1, col = "#7F35B2")
  
}

f_totalvar_eval

f_totalvar_eval <- function(fit){
  
  #calculate total variance (does not change if number of factors change)
  fit_EigenValue <- fit$e.values
  fit_Variance <- fit_EigenValue / length(fit$e.values) * 100 # ncol(data) = sum(fit1$e.values) = length(fit1$e.values)
  fit_SumVariance <- cumsum(fit_EigenValue / length(fit$e.values))
  fit_Total_Variance_Explained <- cbind("Factor number"=
                                            seq(1, length.out = length(fit_EigenValue[fit_EigenValue>0])),
                                            EigenValue = fit_EigenValue[fit_EigenValue>0],
                                            Variance = fit_Variance[fit_EigenValue>0],
                                            Total_Variance = fit_SumVariance[fit_EigenValue>0])
  #display table
  kbl <- fit_Total_Variance_Explained |> 
    stable(caption=paste0("Total Variance Explained for function \"",fit$fn  ,"\" calculated with \"e.values\" argument for rotation \"", fit$rotation, "\" and ", fit$factors, " factors")) 
  
  kbl
  
}

f_totalvar_val

f_totalvar_val <- function(fit){
  
  #calculate total variance (does not change if number of factors change)
  fit_EigenValue <- fit$values
  fit_Variance <- fit_EigenValue / length(fit$values) * 100 # ncol(data) = sum(fit$values) = length(fit$values)
  fit_SumVariance <- cumsum(fit_EigenValue / length(fit$values))
  fit_Total_Variance_Explained <- cbind("Factor number"=
                                            seq(1, length.out = length(fit_EigenValue[fit_EigenValue>0])),
                                            EigenValue = fit_EigenValue[fit_EigenValue>0],
                                            Variance = fit_Variance[fit_EigenValue>0],
                                            Total_Variance = fit_SumVariance[fit_EigenValue>0])
  #display table
  kbl <- fit_Total_Variance_Explained |> 
    stable(caption=paste0("Total Variance Explained for function \"",fit$fn  ,"\" calculated with \"values\" argument for rotation \"", fit$rotation, "\" and ", fit$factors, " factors")) 
  
  kbl
  
}

f_totalvar_load

f_totalvar_load <- function(fit){
  
  #calculate total variance (does not change if number of factors change)
  fit_EigenValue <- f_eigenvalue_load(fit)
  fit_Variance <- fit_EigenValue / length(fit$values) * 100 # ncol(data) = sum(fit$values) = length(fit$values)
  fit_SumVariance <- cumsum(fit_EigenValue / length(fit$values))
  fit_Total_Variance_Explained <- cbind("Factor number"=
                                            seq(1, length.out = length(fit_EigenValue[fit_EigenValue>0])),
                                            EigenValue = fit_EigenValue[fit_EigenValue>0],
                                            Variance = fit_Variance[fit_EigenValue>0],
                                            Total_Variance = fit_SumVariance[fit_EigenValue>0])
  #display table
  kbl <- fit_Total_Variance_Explained |> 
    stable(caption=paste0("Test - Total Variance Explained for function \"",fit$fn  ,"\" calculated with loadings for rotation \"", fit$rotation, "\" and ", fit$factors, " factors")) 
  
  kbl
}

Data preparation

Load data

survey <- read.csv("Case Study III_Structural Equation Modeling.csv")
labels <- read.csv("Variables and Labels_Galeries Lafayette.csv")

dim(survey)
## [1] 553  45
# head(labels)

Clean and handle missing data

# delete variables unused in analysis (see case study instructions): 
survey <- survey |> select(-c("SAT_P1", "SAT_P2", "SAT_P3", "SAT_P4", "SAT_P5", "SAT_P6", "TRU_1", "TRU_2", "TRU_3"))
# "C_CR2", 

# replace missing data (999) with NA
survey <- data.frame(sapply(survey,function(x) ifelse((x==999),NA,as.numeric(x))))

Data exploration

labels

#Make labels more readable
#create copy of label column without variable code
labels["Category"] <- sub("[^-]*\\s-","",labels[["Label"]]) 

#split this new column (category) into category and short label
labels[c("Category","Label_short")] <- str_split_fixed(labels[["Category"]],"\\?\\s\\s|\\s-", n=2)
# labels[20:25,c("Category","Label_short")]

# print out the table
labels[,c("Variable","Category","Label_short")] |>
  stable()
Variable Category Label_short
Im1 What do GLB represent from your point of view Large Assortment
Im2 What do GLB represent from your point of view Assortment Variety
Im3 What do GLB represent from your point of view Artistic Decoration of Sales Area
Im4 What do GLB represent from your point of view Creative Decoration of Sales Area
Im5 What do GLB represent from your point of view Appealing Arrangement of Shop Windows
Im6 What do GLB represent from your point of view France
Im7 What do GLB represent from your point of view French Savoir-vivre
Im8 What do GLB represent from your point of view Expertise in French Traditional Cuisine
Im9 What do GLB represent from your point of view French Fashion
Im10 What do GLB represent from your point of view Gourmet Food
Im11 What do GLB represent from your point of view High-quality Cosmetics
Im12 What do GLB represent from your point of view Luxury brands
Im13 What do GLB represent from your point of view Up tp date Designer Brands
Im14 What do GLB represent from your point of view Gourmet specialities
Im15 What do GLB represent from your point of view Professional Selection of Brands
Im16 What do GLB represent from your point of view Professional Appearance Towards Customers
Im17 What do GLB represent from your point of view Are Trendy
Im18 What do GLB represent from your point of view Are Hip
Im19 What do GLB represent from your point of view Professional Organization
Im20 What do GLB represent from your point of view Relaxing Shopping
Im21 What do GLB represent from your point of view A Great Place to Stroll
Im22 What do GLB represent from your point of view Intimate Shop Atmosphere
C_CR1 CO-CREATION I would like to participate in an expert-workshop to improve the assortment of Galeries Lafayette Berlin.
C_CR2 CO-CREATION I would be available to take part in another survey at Galeries Lafayette Berlin.
C_CR3 CO-CREATION I would like to become a member of a customer group whose opinion is obtained for new products and major changes.
C_CR4 CO-CREATION I would like to participate in planning and designing special events (e.g. fashion show, introduction of new car models) if asked.
C_REP1 REPURCHASE I will continue to be a loyal customer of Galeries Lafayette Berlin.
C_REP2 REPURCHASE I intend to shop at Galeries Lafayette Berlin in the future.
C_REP3 REPURCAHSE I will surely visit Galeries Lafayette Berlin in the future.
COM_A1 AFFECTIVE COMMITMENT How strongly are you attached to Galeries Lafayette Berlin?
COM_A2 AFFECTIVE COMMITMENT How strongly are you emotionally connected to Galeries Lafayette Berlin?
COM_A3 AFFECTIVE COMMITMENT As a customer I feel (close) attached to GL
COM_A4 AFFECTIVE COMMITMENT feel a strong emotional bond toward GLB
SAT_1 SATISFACTION I am very satisfied with Galeries Lafayette Berlin.
SAT_2 SATISFACTION Overall, I am very satisfied with Galeries Lafayette Berlin.
SAT_3 SATISFACTION How satisfied are you with Galeries Lafayette Berlin?
SAT_P1 SATISFACTION EMPLOYEES The employees are capable and professional.
SAT_P2 SATISFACTION EMPLOYEES The employees know best about their products.
SAT_P3 SATISFACTION EMPLOYEES The employees are well-informed.
SAT_P4 SATISFACTION EMPLOYEES The employees are always helpful.
SAT_P5 SATISFACTION EMPLOYEES The employees are willing to respond to my questions in detail.
SAT_P6 SATISFACTION EMPLOYEES The employees are friendly.
TRU_1 TRUST I have the feeling that I can completely rely on GL.
TRU_2 TRUST GLB will always be honest and trustful with me.
TRU_3 TRUST GL will treat me always fair as a customer

Survey

summary(survey)
##       Im1             Im2             Im3             Im4             Im5      
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.00  
##  1st Qu.:4.000   1st Qu.:4.000   1st Qu.:4.000   1st Qu.:4.000   1st Qu.:4.00  
##  Median :5.000   Median :5.000   Median :5.000   Median :5.000   Median :5.00  
##  Mean   :4.792   Mean   :4.854   Mean   :4.985   Mean   :5.002   Mean   :5.04  
##  3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:6.00  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.00  
##  NA's   :14      NA's   :18      NA's   :20      NA's   :10      NA's   :29    
##       Im6             Im7            Im8             Im9             Im10      
##  Min.   :1.000   Min.   :2.00   Min.   :1.000   Min.   :1.000   Min.   :2.000  
##  1st Qu.:5.000   1st Qu.:5.00   1st Qu.:6.000   1st Qu.:4.000   1st Qu.:6.000  
##  Median :6.000   Median :6.00   Median :6.000   Median :5.000   Median :6.000  
##  Mean   :5.824   Mean   :5.75   Mean   :5.996   Mean   :5.076   Mean   :6.102  
##  3rd Qu.:7.000   3rd Qu.:7.00   3rd Qu.:7.000   3rd Qu.:6.000   3rd Qu.:7.000  
##  Max.   :7.000   Max.   :7.00   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##  NA's   :9       NA's   :26     NA's   :6       NA's   :16      NA's   :6      
##       Im11            Im12            Im13            Im14      
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:5.000   1st Qu.:5.000   1st Qu.:5.000   1st Qu.:6.000  
##  Median :6.000   Median :6.000   Median :6.000   Median :6.000  
##  Mean   :5.654   Mean   :5.665   Mean   :5.444   Mean   :6.144  
##  3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:7.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##  NA's   :12      NA's   :21      NA's   :15      NA's   :24     
##       Im15            Im16           Im17            Im18            Im19      
##  Min.   :1.000   Min.   :1.00   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:4.000   1st Qu.:4.00   1st Qu.:4.000   1st Qu.:4.000   1st Qu.:4.000  
##  Median :5.000   Median :5.00   Median :5.000   Median :5.000   Median :5.000  
##  Mean   :5.098   Mean   :5.13   Mean   :5.018   Mean   :4.571   Mean   :5.148  
##  3rd Qu.:6.000   3rd Qu.:6.00   3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:6.000  
##  Max.   :7.000   Max.   :7.00   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##  NA's   :12      NA's   :24     NA's   :12      NA's   :28      NA's   :12     
##       Im20            Im21            Im22           C_CR1      
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:4.000   1st Qu.:4.000   1st Qu.:3.000   1st Qu.:1.000  
##  Median :5.000   Median :5.000   Median :4.000   Median :2.000  
##  Mean   :4.669   Mean   :5.135   Mean   :4.289   Mean   :2.674  
##  3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:4.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
##  NA's   :9       NA's   :5       NA's   :17      NA's   :20     
##      C_CR2           C_CR3           C_CR4           C_REP1          C_REP2    
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.00  
##  1st Qu.:3.000   1st Qu.:1.000   1st Qu.:1.000   1st Qu.:4.000   1st Qu.:4.00  
##  Median :5.000   Median :3.000   Median :2.000   Median :4.000   Median :5.00  
##  Mean   :4.616   Mean   :3.271   Mean   :2.796   Mean   :4.281   Mean   :4.51  
##  3rd Qu.:6.000   3rd Qu.:5.000   3rd Qu.:4.000   3rd Qu.:5.000   3rd Qu.:5.00  
##  Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :5.000   Max.   :5.00  
##  NA's   :30      NA's   :6       NA's   :10      NA's   :5       NA's   :16    
##      C_REP3          COM_A1          COM_A2         COM_A3          COM_A4     
##  Min.   :1.000   Min.   :1.000   Min.   :1.00   Min.   :1.000   Min.   :1.000  
##  1st Qu.:4.000   1st Qu.:4.000   1st Qu.:3.00   1st Qu.:2.000   1st Qu.:2.000  
##  Median :5.000   Median :4.000   Median :4.00   Median :3.000   Median :3.000  
##  Mean   :4.682   Mean   :4.302   Mean   :3.88   Mean   :3.536   Mean   :3.456  
##  3rd Qu.:5.000   3rd Qu.:5.000   3rd Qu.:5.00   3rd Qu.:5.000   3rd Qu.:5.000  
##  Max.   :5.000   Max.   :7.000   Max.   :7.00   Max.   :7.000   Max.   :7.000  
##  NA's   :18      NA's   :14      NA's   :11     NA's   :18      NA's   :9      
##      SAT_1           SAT_2           SAT_3     
##  Min.   :2.000   Min.   :1.000   Min.   :1.00  
##  1st Qu.:5.000   1st Qu.:5.000   1st Qu.:5.00  
##  Median :6.000   Median :6.000   Median :6.00  
##  Mean   :5.349   Mean   :5.481   Mean   :5.45  
##  3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:6.00  
##  Max.   :7.000   Max.   :7.000   Max.   :7.00  
##  NA's   :5       NA's   :10      NA's   :40
  • Looking at the data we see that all survey questions seem to be based on a 7-level Likert scale.

  • The data does have missing values which we will handle in the following way:

    • for Exploratory Factor Analysis we will apply listwise deletion
    • for Confirmatory Factor Analysis and Structural Equation Modelling we will use Maximum Likelihood to handle the missing data.
  • The total number of observations is 553

Exploratory Factor Analysis

ROUND 1 EFA

Variable selection

# excluded image variables (in the first round of EFA we don't exclude any image variables...)
exclude=c() 

# the full survey data (includes dependent and independent variables) with excluded image variables (in this first round of EFA we don't exclude anything)
survey_excl_img <- survey |> select(-exclude)

# the data we will use for EFA (images)
data_img_EFA <- survey_excl_img[1:(22-length(exclude))]

# list of excluded variables and their meaning
excludedvars <- filter(labels, Variable %in% exclude)[c("Variable","Label_short")] 
excludedvars |>
  stable(caption="Indicator variables we chose to exclude:")
Indicator variables we chose to exclude:
Variable Label_short

handle missing data

# delete missing data (delete listwise)
data_img_EFA <- na.omit(data_img_EFA)

dim(survey)
## [1] 553  36
dim(survey_excl_img)
## [1] 553  36
dim(data_img_EFA)
## [1] 385  22

Check adequacy of correlation Matrix

correlation matrix

f_corr_matrix(data_img_EFA)

Variables to look out for going forward:

  • Correlations for Images 9 and 11 are fairly evenly distributed across all other variables, they do not correlate with a specific group of other variables.

  • Pairs of images: (17,18), are highly correlated and similar correlation profiles, their correlations to other variables are similar. Same comment to a lesser degree for pairs (6,7) and (16,19). Each of these variable pairs will most likely make up a factor.

Bartlett test

# p-value < 0.5
# pass/ fail
f_bartlett(data_img_EFA)[[1]]
Value Result
pvalue 0.000 PASS
chisq 6451.238
# details
f_bartlett(data_img_EFA)[[2]]
##  Bartlett's Test of Sphericity
## 
## Call: bart_spher(x = data)
## 
##      X2 = 6451.238
##      df = 231
## p-value < 2.22e-16

The Bartlett Test tests the hypothesis that the sample originates from a population, where all variables are uncorrelated. The null hypothesis of Bartlett’s test rejected meaning that the data is not uncorrelated and indicates it is fit for factor analysis.

KMO test

# KMO > 0.6
f_KMO(data_img_EFA)
Value Result
KMO 0.877 PASS

The KMO is above 0.6 which indicates the data is well suited for factor anlysis.

Anti-image Correlation (MSA)

# MSA > 0.5
f_MSA(data_img_EFA)
Item MSA
Im2 0.822
Im6 0.822
Im1 0.824
Im20 0.827
Im14 0.827
Im10 0.829
Im7 0.845
Im4 0.854
Im18 0.855
Im3 0.864
Im17 0.864
Im13 0.872
Im12 0.879
Im22 0.879
Im16 0.909
Im11 0.911
Im21 0.915
Im8 0.930
Im9 0.938
Im19 0.940
Im5 0.955
Im15 0.965

Variables with MSA values above 0.5 are suited for factor analysis.

Presence of items with low MSA’s (<0.5) could indicate that an important topic has not been well covered in the questionnaire.

In our case, all variables have MSA above 0.5.

Determine number of factors

# factor analysis
PAF1 <- psych::fa(data_img_EFA, rotate="varimax", scores=TRUE)
# note: by default number of factors = 1 if it is not specified

Scree

f_scree(PAF1)

The scree plot suggests we should keep the factors before the “elbow”. In our case this might be 2, 6 and potentially 8 but this is hard to tell.

Kaiser Criterion

f_kaiser(PAF1)
## [1] "Kaiser number = 6"

The Kaiser criterion suggests we should retain factors with eigenvalues bigger than 1.

There are 6 factors satisfying this condition.

It is common practice to keep one more factor than the result of the Kaiser criterion, so 7.

Total variance explained

f_totalvar_eval(PAF1)
Total Variance Explained for function “fa” calculated with “e.values” argument for rotation “varimax” and 1 factors
Factor number EigenValue Variance Total_Variance
1 8.98 40.81 0.41
2 2.47 11.21 0.52
3 1.56 7.10 0.59
4 1.46 6.62 0.66
5 1.25 5.67 0.71
6 1.15 5.22 0.77
7 0.81 3.68 0.80
8 0.71 3.23 0.84
9 0.57 2.58 0.86
10 0.46 2.08 0.88
11 0.36 1.64 0.90
12 0.33 1.51 0.91
13 0.29 1.34 0.93
14 0.28 1.29 0.94
15 0.25 1.13 0.95
16 0.23 1.04 0.96
17 0.20 0.92 0.97
18 0.19 0.85 0.98
19 0.16 0.72 0.99
20 0.12 0.53 0.99
21 0.10 0.46 1.00
22 0.08 0.37 1.00

With 7 factors we would explain 80% of the variance.

We notice that the gain in variance explanation from 7 to 8 factors (3.23%) is comparable to the one from 6 to 7 (3.68%) but after there is a sharp drop, this again could indicate that we might need 8 factors, which would explain 84% of the total variance.

Factor number selection

Based on the results above we decide to test factor analysis solutions for 6, 7 and 8 factors.

# select nb of factors to explore
nf = c(6,7,8)

n factor PAF

PAFn <- f_PAFn(data_img_EFA, nf, "varimax")
PAFn_obl = f_PAFn(data_img_EFA, nf, "promax")

Communality

#communalities for all selected number of factors (eliminate variables with communality < 0.3)

for (i in 1:length(nf)) {

    cat("##### Number of factors =", nf[[i]], "{.unnumbered .tabset}" ,"\n")

    print(f_communality(PAFn[[i]]))
  
    cat("\n\n")
}
Number of factors = 6
Communality for function “fa” with rotation “varimax” and 6 factors
Item Communality
Im11 0.45
Im9 0.46
Im16 0.47
Im19 0.52
Im5 0.55
Im18 0.57
Im15 0.63
Im21 0.65
Im17 0.70
Im13 0.70
Im6 0.71
Im12 0.73
Im8 0.74
Im14 0.76
Im2 0.76
Im10 0.78
Im7 0.78
Im20 0.79
Im22 0.79
Im1 0.84
Im3 0.85
Im4 0.92
Number of factors = 7
Communality for function “fa” with rotation “varimax” and 7 factors
Item Communality
Im11 0.44
Im9 0.46
Im16 0.47
Im19 0.53
Im5 0.54
Im15 0.63
Im21 0.65
Im13 0.70
Im18 0.71
Im8 0.72
Im6 0.76
Im2 0.78
Im22 0.79
Im20 0.79
Im14 0.81
Im12 0.83
Im7 0.85
Im1 0.86
Im3 0.86
Im10 0.89
Im17 0.95
Im4 0.97
Number of factors = 8
Communality for function “fa” with rotation “varimax” and 8 factors
Item Communality
Im11 0.45
Im9 0.46
Im5 0.58
Im19 0.62
Im15 0.65
Im21 0.65
Im13 0.70
Im8 0.72
Im18 0.74
Im6 0.76
Im22 0.78
Im16 0.80
Im2 0.81
Im20 0.81
Im12 0.84
Im7 0.85
Im14 0.85
Im3 0.86
Im10 0.90
Im17 0.93
Im1 0.94
Im4 0.97

Typically we should think about excluding variables with communalities below 0.3.

There are no variables satisfying this condition above.

But we still keep an eye out for those variables with the lowest communality: Im9 and Im11.

Factor loadings

# loadings for all selected number of factors

for (i in 1:length(nf)) {
  
    cat("##### Number of factors =", nf[[i]], "{.unnumbered .tabset}" ,"\n")

    cat("###### Structure Matrix {.unnumbered}" ,"\n")
    
    print(f_loadings(PAFn[[i]]))
    
    cat("###### Pattern Matrix{.unnumbered}" ,"\n")
  
    print(f_loadings(PAFn_obl[[i]]))
      
    cat("\n\n")
}
Number of factors = 6
Structure Matrix
Variable MR2 MR5 MR1 MR4 MR3 MR6 Complexity Uniqueness
Im1 0.86 1.30 0.16
Im2 0.83 1.24 0.24
Im3 0.83 1.51 0.15
Im4 0.88 1.42 0.08
Im5 0.64 1.74 0.45
Im6 0.61 0.56 2.12 0.29
Im7 0.72 0.48 1.88 0.22
Im8 0.81 1.25 0.26
Im9 0.35 0.32 0.43 3.51 0.54
Im10 0.80 1.42 0.22
Im11 0.59 1.62 0.55
Im12 0.79 1.34 0.27
Im13 0.73 1.66 0.30
Im14 0.80 1.42 0.24
Im15 0.60 2.76 0.37
Im16 0.48 0.37 2.78 0.53
Im17 0.35 0.31 0.39 0.54 3.66 0.30
Im18 0.35 0.50 3.48 0.43
Im19 0.46 0.40 3.45 0.48
Im20 0.84 1.22 0.21
Im21 0.73 1.43 0.35
Im22 0.79 1.60 0.21
Pattern Matrix
Variable MR2 MR5 MR1 MR4 MR3 MR6 Complexity Uniqueness
Im1 1.05 1.06 0.16
Im2 1.03 1.07 0.24
Im3 0.99 1.03 0.15
Im4 1.06 1.05 0.08
Im5 0.74 1.03 0.45
Im6 0.52 0.68 2.22 0.29
Im7 0.65 0.56 2.24 0.22
Im8 0.80 1.05 0.26
Im9 0.48 1.95 0.54
Im10 0.81 1.23 0.22
Im11 0.67 1.15 0.55
Im12 0.91 1.03 0.27
Im13 0.79 1.09 0.30
Im14 0.80 1.18 0.24
Im15 0.60 1.18 0.37
Im16 0.46 1.81 0.53
Im17 0.57 1.97 0.30
Im18 0.54 1.91 0.43
Im19 0.39 2.15 0.48
Im20 0.92 1.07 0.21
Im21 0.76 1.07 0.35
Im22 0.80 1.04 0.21
Number of factors = 7
Structure Matrix
Variable MR5 MR1 MR3 MR2 MR4 MR7 MR6 Complexity Uniqueness
Im1 0.86 1.33 0.14
Im2 0.83 1.27 0.22
Im3 0.83 1.56 0.14
Im4 0.90 1.40 0.03
Im5 0.63 1.85 0.46
Im6 0.83 1.25 0.24
Im7 0.32 0.84 1.44 0.15
Im8 0.63 0.51 2.31 0.28
Im9 0.33 0.45 3.45 0.54
Im10 0.87 1.35 0.11
Im11 0.58 1.72 0.56
Im12 0.85 1.30 0.17
Im13 0.72 1.81 0.30
Im14 0.81 1.50 0.19
Im15 0.59 2.97 0.37
Im16 0.46 0.34 3.44 0.53
Im17 0.84 1.76 0.05
Im18 0.72 1.85 0.29
Im19 0.43 0.37 4.25 0.47
Im20 0.85 1.21 0.21
Im21 0.73 1.44 0.35
Im22 0.78 1.62 0.21
Pattern Matrix
Variable MR5 MR1 MR2 MR3 MR4 MR7 MR6 Complexity Uniqueness
Im1 1.08 1.06 0.14
Im2 1.05 1.06 0.22
Im3 1.00 1.02 0.14
Im4 1.13 1.04 0.03
Im5 0.72 1.02 0.46
Im6 0.92 1.06 0.24
Im7 0.89 1.06 0.15
Im8 0.62 0.38 1.74 0.28
Im9 0.42 2.10 0.54
Im10 1.04 1.03 0.11
Im11 0.65 1.14 0.56
Im12 1.01 1.04 0.17
Im13 0.78 1.08 0.30
Im14 0.94 1.01 0.19
Im15 0.60 1.17 0.37
Im16 0.40 2.69 0.53
Im17 1.09 1.02 0.05
Im18 0.92 1.02 0.29
Im19 0.33 3.23 0.47
Im20 0.94 1.05 0.21
Im21 0.78 1.06 0.35
Im22 0.81 1.05 0.21
Number of factors = 8
Structure Matrix
Variable MR1 MR3 MR4 MR7 MR2 MR5 MR6 MR8 Complexity Uniqueness
Im1 0.88 1.45 0.06
Im2 0.82 1.45 0.19
Im3 0.81 1.66 0.14
Im4 0.89 1.47 0.03
Im5 0.65 1.84 0.42
Im6 0.83 1.23 0.24
Im7 0.84 0.30 1.40 0.15
Im8 0.54 0.59 2.56 0.28
Im9 0.33 0.46 3.34 0.54
Im10 0.87 1.41 0.10
Im11 0.58 1.72 0.55
Im12 0.86 1.28 0.16
Im13 0.72 1.78 0.30
Im14 0.83 1.49 0.15
Im15 0.47 0.39 4.81 0.35
Im16 0.77 1.78 0.20
Im17 0.82 1.82 0.07
Im18 0.74 1.76 0.26
Im19 0.30 0.54 3.68 0.38
Im20 0.86 1.20 0.19
Im21 0.73 1.44 0.35
Im22 0.78 1.63 0.22
Pattern Matrix
Variable MR1 MR3 MR7 MR2 MR4 MR5 MR6 MR8 Complexity Uniqueness
Im1 1.04 1.01 0.06
Im2 0.95 1.02 0.19
Im3 0.90 1.02 0.14
Im4 1.03 1.03 0.03
Im5 0.72 1.11 0.42
Im6 0.98 1.06 0.24
Im7 0.95 1.05 0.15
Im8 0.43 0.49 2.39 0.28
Im9 0.45 1.92 0.54
Im10 0.97 1.01 0.10
Im11 0.66 1.15 0.55
Im12 1.04 1.05 0.16
Im13 0.79 1.06 0.30
Im14 0.92 1.02 0.15
Im15 0.35 0.36 2.73 0.35
Im16 1.02 1.03 0.20
Im17 0.98 1.01 0.07
Im18 0.90 1.01 0.26
Im19 0.63 1.11 0.38
Im20 0.98 1.09 0.19
Im21 0.79 1.06 0.35
Im22 0.82 1.06 0.22

Looking at the 6 factor solution, we see quite a lot of variables cross-loading on multiple factors: Im6, Im7, Im9, Im16, Im17, Im18, Im19. These are a lot of cross-loading variables, in addition we have already commented above looking at the correlation matrix that pairs of variables (Im16, Im19) and (Im17, Im18) will most likely need their own factor. We need to consider more factors.

The 7 factor solution seems better. There are less cross-loading elements. We notice though that the pair (Im16, Im19) still doesn’t have its own factor to load on as we might expect.

The 8 factor solution is in our opinion the best out of the 3. The high correlation pairs now mostly all load on their own factors and we have many less cross-loading elements.

The remaining cross-loading elements are: Im8, Im9 and Im15 and Im19 to a lesser extent.

We now perform a second round of exploratory factor analysis but excluding the 3 variables Im8, Im9, Im15

ROUND 2 EFA

Variable selection

# excluded image variables (in the first round of EFA we don't exclude any image variables...)
exclude=c("Im8", "Im9", "Im15") 

# the full survey data (includes dependent and independent variables) with excluded image variables (in this first round of EFA we don't exclude anything)
survey_excl_img <- survey |> select(-exclude)

# the data we will use for EFA (images)
data_img_EFA <- survey_excl_img[1:(22-length(exclude))]

# list of excluded variables and their meaning
excludedvars <- filter(labels, Variable %in% exclude)[c("Variable","Label_short")] 
excludedvars |>
  stable(caption="Indicator variables we chose to exclude:")
Indicator variables we chose to exclude:
Variable Label_short
Im8 Expertise in French Traditional Cuisine
Im9 French Fashion
Im15 Professional Selection of Brands

handle missing data

# delete missing data (delete listwise)
data_img_EFA <- na.omit(data_img_EFA)

dim(survey)
## [1] 553  36
dim(survey_excl_img)
## [1] 553  33
dim(data_img_EFA)
## [1] 394  19

Factor number selection

In addition to the preferred 8 factor solution we also keep the 7 factor solution just in case.

# select nb of factors to explore
nf = c(7,8)

n factor PAF

PAFn <- f_PAFn(data_img_EFA, nf, "varimax")
PAFn_obl = f_PAFn(data_img_EFA, nf, "promax")

Communality

#communalities for all selected number of factors (eliminate variables with communality < 0.3)

for (i in 1:length(nf)) {

    cat("##### Number of factors =", nf[[i]], "{.unnumbered .tabset}" ,"\n")

    print(f_communality(PAFn[[i]]))
  
    cat("\n\n")
}
Number of factors = 7
Communality for function “fa” with rotation “varimax” and 7 factors
Item Communality
Im16 0.43
Im11 0.43
Im19 0.51
Im5 0.55
Im21 0.64
Im18 0.67
Im13 0.69
Im7 0.72
Im14 0.78
Im22 0.78
Im20 0.79
Im2 0.81
Im3 0.86
Im12 0.87
Im1 0.91
Im6 0.93
Im4 0.97
Im10 0.97
Im17 1.00
Number of factors = 8
Communality for function “fa” with rotation “varimax” and 8 factors
Item Communality
Im11 0.43
Im5 0.58
Im21 0.64
Im16 0.67
Im18 0.68
Im13 0.69
Im7 0.69
Im19 0.70
Im2 0.76
Im14 0.78
Im22 0.78
Im20 0.81
Im3 0.86
Im12 0.87
Im4 0.97
Im6 0.99
Im10 1.00
Im17 1.00
Im1 1.00

All communalities are above 0.3.

Im11 is amongst the lowest communality variables in both the 7 and 8 factor solutions.

Factor loadings

# loadings for all selected number of factors

for (i in 1:length(nf)) {
  
    cat("##### Number of factors =", nf[[i]], "{.unnumbered .tabset}" ,"\n")

    cat("###### Structure Matrix {.unnumbered}" ,"\n")
    
    print(f_loadings(PAFn[[i]]))
    
    cat("###### Pattern Matrix{.unnumbered}" ,"\n")
  
    print(f_loadings(PAFn_obl[[i]]))
      
    cat("\n\n")
}
Number of factors = 7
Structure Matrix
Variable MR1 MR3 MR4 MR5 MR2 MR6 MR7 Complexity Uniqueness
Im1 0.87 1.40 0.09
Im2 0.83 1.35 0.19
Im3 0.84 1.46 0.14
Im4 0.92 1.33 0.03
Im5 0.64 1.73 0.45
Im6 0.93 1.17 0.07
Im7 0.33 0.75 1.62 0.28
Im10 0.92 1.32 0.03
Im11 0.57 1.70 0.57
Im12 0.88 1.23 0.13
Im13 0.72 1.76 0.31
Im14 0.77 0.30 1.67 0.22
Im16 0.38 0.37 3.99 0.57
Im17 0.88 1.60 0.00
Im18 0.70 1.84 0.33
Im19 0.40 0.37 4.52 0.49
Im20 0.85 1.19 0.21
Im21 0.73 1.43 0.36
Im22 0.79 1.55 0.22
Pattern Matrix
Variable MR1 MR3 MR5 MR4 MR2 MR6 MR7 Complexity Uniqueness
Im1 1.07 1.05 0.09
Im2 1.02 1.03 0.19
Im3 1.01 1.02 0.14
Im4 1.14 1.05 0.03
Im5 0.73 1.02 0.45
Im6 0.98 1.04 0.07
Im7 0.73 1.16 0.28
Im10 1.10 1.03 0.03
Im11 0.60 1.16 0.57
Im12 1.00 1.03 0.13
Im13 0.75 1.11 0.31
Im14 0.87 1.04 0.22
Im16 3.60 0.57
Im17 1.12 1.02 0.00
Im18 0.86 1.03 0.33
Im19 3.47 0.49
Im20 0.94 1.04 0.21
Im21 0.77 1.05 0.36
Im22 0.82 1.03 0.22
Number of factors = 8
Structure Matrix
Variable MR1 MR3 MR4 MR5 MR2 MR7 MR6 MR8 Complexity Uniqueness
Im1 0.91 1.44 0.00
Im2 0.78 1.56 0.24
Im3 0.82 1.63 0.14
Im4 0.89 1.46 0.03
Im5 0.66 1.78 0.42
Im6 0.96 1.15 0.01
Im7 0.34 0.72 1.69 0.31
Im10 0.93 1.32 0.00
Im11 0.57 1.71 0.57
Im12 0.89 1.22 0.13
Im13 0.72 1.76 0.31
Im14 0.77 1.68 0.22
Im16 0.68 2.03 0.33
Im17 0.88 1.65 0.00
Im18 0.70 1.84 0.32
Im19 0.64 2.71 0.30
Im20 0.86 1.19 0.19
Im21 0.73 1.44 0.36
Im22 0.79 1.56 0.22
Pattern Matrix
Variable MR1 MR3 MR4 MR2 MR5 MR6 MR7 MR8 Complexity Uniqueness
Im1 1.03 1.01 0.00
Im2 0.86 1.01 0.24
Im3 0.90 1.02 0.14
Im4 1.02 1.03 0.03
Im5 0.73 1.09 0.42
Im6 1.06 1.03 0.01
Im7 0.72 1.14 0.31
Im10 1.05 1.02 0.00
Im11 0.60 1.15 0.57
Im12 1.02 1.04 0.13
Im13 0.75 1.09 0.31
Im14 0.82 1.03 0.22
Im16 0.80 1.02 0.33
Im17 1.03 1.01 0.00
Im18 0.81 1.00 0.32
Im19 0.72 1.04 0.30
Im20 0.97 1.09 0.19
Im21 0.77 1.05 0.36
Im22 0.82 1.04 0.22

Looking at the structure and pattern matrices for both the 7 and 8 factor solutions, we get confirmation that the 8 factor solution is indeed the best one. It has very clear loadings. the 7 factor solution is not satisfactory, for instance Im16 and Im19 don’t load on any factors at all in the pattern matrix.

Factor interpretation

Looking at the labels of the image items, we now interpret the meaning of each factor.

fact_interpretation <- c("Decoration","Gourmet Food","Relaxed Atmosphere",
                    "Product Quality","Choice Range","Brand Image",
                    "Frenchness","Professionalism")

names(fact_interpretation) <- c("MR1","MR2","MR3",
                           "MR4","MR5","MR6",
                           "MR7","MR8")


f_factor_interp(PAFn[["8"]], labels,fact_interpretation)
Variable Label_short Loads_on Interpretation
Im15 Professional Selection of Brands excluded
Im8 Expertise in French Traditional Cuisine excluded
Im9 French Fashion excluded
Im3 Artistic Decoration of Sales Area MR1 Decoration
Im4 Creative Decoration of Sales Area MR1 Decoration
Im5 Appealing Arrangement of Shop Windows MR1 Decoration
Im10 Gourmet Food MR2 Gourmet Food
Im14 Gourmet specialities MR2 Gourmet Food
Im20 Relaxing Shopping MR3 Relaxed Atmosphere
Im21 A Great Place to Stroll MR3 Relaxed Atmosphere
Im22 Intimate Shop Atmosphere MR3 Relaxed Atmosphere
Im11 High-quality Cosmetics MR4 Product Quality
Im12 Luxury brands MR4 Product Quality
Im13 Up tp date Designer Brands MR4 Product Quality
Im1 Large Assortment MR5 Choice Range
Im2 Assortment Variety MR5 Choice Range
Im17 Are Trendy MR6 Brand Image
Im18 Are Hip MR6 Brand Image
Im6 France MR7 Frenchness
Im7 French Savoir-vivre MR7 Frenchness
Im16 Professional Appearance Towards Customers MR8 Professionalism
Im19 Professional Organization MR8 Professionalism

Confirmatory factor analysis

It is sometimes the case that when we perform a confirmatory factor analysis on the solution found in the exploratory phase we get pretty bad results and need to make some tweaks.

Let us test whether the constructs found in the exploratory phase adequately describe the dimensions of the data.

Define the model

We start with exactly the model suggested in our exploratory phase with the Im8, Im9 and Im15 excluded.

model_CFA <- "
DECO =~ Im3 + Im4 + Im5
FOOD =~ Im10 + Im14
ATMOS =~ Im20 + Im21 + Im22
PRODQUAL =~ Im11 + Im12 + Im13
CHOICE =~ Im1 + Im2
PROF =~ Im16 + Im19
BRAND =~ Im17 + Im18
FRENCH =~ Im6 + Im7
"

Fit

fit_CFA <- cfa(model_CFA, data=survey, missing="ML")

SEM plot

semPaths(fit_CFA, what = "path", whatLabels = "std", style = "mx",
         rotation = 2, layout = "tree3", mar = c(1, 2, 1, 2),
         nCharNodes = 7,shapeMan = "rectangle",
         sizeMan = 4, sizeMan2 = 3, sizeInt = 2, sizeLat = 6, asize = 1.5,
         curvePivot=TRUE, edge.label.cex = .8, edge.color = "skyblue4"
         )

Global fit measures

global_fit_measures <- f_global_fit_measures(fit_CFA)
# check global fit pass/fail of global fit measures
global_fit_measures[[1]]
Value Result
pvalue 0.000 FAIL
chisq 259.047
cfi 0.982 Accept model
rmsea 0.044 Good fit

Full summary

# output full summary
global_fit_measures[[2]]
## lavaan 0.6.15 ended normally after 108 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        85
## 
##   Number of observations                           553
##   Number of missing patterns                        79
## 
## Model Test User Model:
##                                                       
##   Test statistic                               259.047
##   Degrees of freedom                               124
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                              7474.765
##   Degrees of freedom                               171
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.982
##   Tucker-Lewis Index (TLI)                       0.975
##                                                       
##   Robust Comparative Fit Index (CFI)             0.981
##   Robust Tucker-Lewis Index (TLI)                0.974
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -12973.111
##   Loglikelihood unrestricted model (H1)     -12843.588
##                                                       
##   Akaike (AIC)                               26116.223
##   Bayesian (BIC)                             26483.028
##   Sample-size adjusted Bayesian (SABIC)      26213.200
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.044
##   90 Percent confidence interval - lower         0.037
##   90 Percent confidence interval - upper         0.052
##   P-value H_0: RMSEA <= 0.050                    0.886
##   P-value H_0: RMSEA >= 0.080                    0.000
##                                                       
##   Robust RMSEA                                   0.045
##   90 Percent confidence interval - lower         0.038
##   90 Percent confidence interval - upper         0.053
##   P-value H_0: Robust RMSEA <= 0.050             0.825
##   P-value H_0: Robust RMSEA >= 0.080             0.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.029
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   DECO =~                                                               
##     Im3               1.000                               1.236    0.937
##     Im4               1.056    0.025   42.717    0.000    1.305    0.969
##     Im5               0.818    0.034   23.815    0.000    1.011    0.760
##   FOOD =~                                                               
##     Im10              1.000                               0.812    0.923
##     Im14              1.015    0.036   28.479    0.000    0.824    0.952
##   ATMOS =~                                                              
##     Im20              1.000                               1.265    0.845
##     Im21              0.849    0.041   20.823    0.000    1.074    0.783
##     Im22              1.060    0.047   22.606    0.000    1.340    0.877
##   PRODQUAL =~                                                           
##     Im11              1.000                               0.703    0.615
##     Im12              1.410    0.094   15.046    0.000    0.991    0.872
##     Im13              1.465    0.105   13.968    0.000    1.030    0.855
##   CHOICE =~                                                             
##     Im1               1.000                               1.305    0.980
##     Im2               0.885    0.033   27.043    0.000    1.155    0.899
##   PROF =~                                                               
##     Im16              1.000                               0.921    0.766
##     Im19              1.046    0.061   17.170    0.000    0.963    0.856
##   BRAND =~                                                              
##     Im17              1.000                               1.204    0.969
##     Im18              0.994    0.041   24.143    0.000    1.197    0.856
##   FRENCH =~                                                             
##     Im6               1.000                               0.975    0.813
##     Im7               1.184    0.071   16.770    0.000    1.155    0.955
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   DECO ~~                                                               
##     FOOD              0.418    0.050    8.393    0.000    0.416    0.416
##     ATMOS             0.730    0.082    8.912    0.000    0.467    0.467
##     PRODQUAL          0.409    0.051    8.040    0.000    0.471    0.471
##     CHOICE            0.711    0.079    9.032    0.000    0.441    0.441
##     PROF              0.743    0.071   10.465    0.000    0.653    0.653
##     BRAND             0.770    0.076   10.140    0.000    0.517    0.517
##     FRENCH            0.402    0.063    6.350    0.000    0.334    0.334
##   FOOD ~~                                                               
##     ATMOS             0.303    0.051    5.948    0.000    0.295    0.295
##     PRODQUAL          0.258    0.034    7.662    0.000    0.452    0.452
##     CHOICE            0.328    0.050    6.584    0.000    0.309    0.309
##     PROF              0.372    0.043    8.589    0.000    0.498    0.498
##     BRAND             0.318    0.047    6.801    0.000    0.325    0.325
##     FRENCH            0.463    0.047    9.829    0.000    0.585    0.585
##   ATMOS ~~                                                              
##     PRODQUAL          0.372    0.053    7.011    0.000    0.418    0.418
##     CHOICE            0.739    0.085    8.728    0.000    0.448    0.448
##     PROF              0.557    0.069    8.089    0.000    0.478    0.478
##     BRAND             0.787    0.081    9.715    0.000    0.516    0.516
##     FRENCH            0.410    0.065    6.352    0.000    0.333    0.333
##   PRODQUAL ~~                                                           
##     CHOICE            0.439    0.054    8.161    0.000    0.478    0.478
##     PROF              0.343    0.043    7.946    0.000    0.529    0.529
##     BRAND             0.479    0.053    9.046    0.000    0.566    0.566
##     FRENCH            0.210    0.037    5.622    0.000    0.306    0.306
##   CHOICE ~~                                                             
##     PROF              0.717    0.072    9.956    0.000    0.597    0.597
##     BRAND             0.817    0.079   10.362    0.000    0.519    0.519
##     FRENCH            0.286    0.060    4.735    0.000    0.225    0.225
##   PROF ~~                                                               
##     BRAND             0.667    0.066   10.040    0.000    0.601    0.601
##     FRENCH            0.328    0.051    6.438    0.000    0.366    0.366
##   BRAND ~~                                                              
##     FRENCH            0.378    0.061    6.175    0.000    0.322    0.322
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Im3               4.995    0.056   88.560    0.000    4.995    3.786
##    .Im4               4.999    0.057   86.983    0.000    4.999    3.712
##    .Im5               5.035    0.057   87.844    0.000    5.035    3.787
##    .Im10              6.100    0.037  162.789    0.000    6.100    6.937
##    .Im14              6.138    0.037  165.861    0.000    6.138    7.093
##    .Im20              4.672    0.064   73.177    0.000    4.672    3.123
##    .Im21              5.139    0.058   87.970    0.000    5.139    3.751
##    .Im22              4.279    0.065   65.401    0.000    4.279    2.799
##    .Im11              5.653    0.049  115.271    0.000    5.653    4.943
##    .Im12              5.666    0.049  116.089    0.000    5.666    4.983
##    .Im13              5.448    0.052  105.615    0.000    5.448    4.524
##    .Im1               4.790    0.057   84.202    0.000    4.790    3.597
##    .Im2               4.857    0.055   88.354    0.000    4.857    3.779
##    .Im16              5.135    0.052   99.147    0.000    5.135    4.269
##    .Im19              5.145    0.048  106.948    0.000    5.145    4.574
##    .Im17              5.025    0.053   94.519    0.000    5.025    4.041
##    .Im18              4.595    0.060   76.447    0.000    4.595    3.287
##    .Im6               5.827    0.051  113.784    0.000    5.827    4.858
##    .Im7               5.753    0.052  110.826    0.000    5.753    4.756
##     DECO              0.000                               0.000    0.000
##     FOOD              0.000                               0.000    0.000
##     ATMOS             0.000                               0.000    0.000
##     PRODQUAL          0.000                               0.000    0.000
##     CHOICE            0.000                               0.000    0.000
##     PROF              0.000                               0.000    0.000
##     BRAND             0.000                               0.000    0.000
##     FRENCH            0.000                               0.000    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Im3               0.213    0.024    8.755    0.000    0.213    0.122
##    .Im4               0.109    0.024    4.532    0.000    0.109    0.060
##    .Im5               0.747    0.049   15.217    0.000    0.747    0.422
##    .Im10              0.114    0.019    5.961    0.000    0.114    0.148
##    .Im14              0.070    0.019    3.680    0.000    0.070    0.093
##    .Im20              0.638    0.061   10.451    0.000    0.638    0.285
##    .Im21              0.725    0.057   12.672    0.000    0.725    0.386
##    .Im22              0.541    0.063    8.539    0.000    0.541    0.231
##    .Im11              0.814    0.055   14.802    0.000    0.814    0.622
##    .Im12              0.310    0.040    7.845    0.000    0.310    0.240
##    .Im13              0.390    0.045    8.765    0.000    0.390    0.269
##    .Im1               0.070    0.050    1.394    0.163    0.070    0.040
##    .Im2               0.317    0.044    7.233    0.000    0.317    0.192
##    .Im16              0.599    0.052   11.498    0.000    0.599    0.414
##    .Im19              0.338    0.045    7.457    0.000    0.338    0.267
##    .Im17              0.095    0.045    2.112    0.035    0.095    0.062
##    .Im18              0.521    0.055    9.540    0.000    0.521    0.267
##    .Im6               0.487    0.056    8.677    0.000    0.487    0.339
##    .Im7               0.128    0.067    1.930    0.054    0.128    0.088
##     DECO              1.528    0.107   14.326    0.000    1.000    1.000
##     FOOD              0.659    0.049   13.328    0.000    1.000    1.000
##     ATMOS             1.599    0.138   11.623    0.000    1.000    1.000
##     PRODQUAL          0.494    0.067    7.361    0.000    1.000    1.000
##     CHOICE            1.704    0.118   14.388    0.000    1.000    1.000
##     PROF              0.849    0.088    9.638    0.000    1.000    1.000
##     BRAND             1.451    0.104   13.988    0.000    1.000    1.000
##     FRENCH            0.952    0.095   10.058    0.000    1.000    1.000

CFI and RMSEA indicate the factor model is good.

We get a very low p-value indicating the covariance matrix generated by the estimated model does not reproduce the empirical sample covariance matrix S generated by our data. We are not sure why we get such a low p-value and from here onwards we decide to ignore it and focus exclusively on CFI and RMSEA global fit assessments.

local fit measures

lambda = inspect(fit_CFA, what="std")$lambda
theta = inspect(fit_CFA, what="std")$theta
psi = inspect(fit_CFA, what="std")$psi

Indicator reliability criterion (Individual Item Reliability)

# calculate indicator reliabilities (should be larger than 0.4)
indic_rel <- f_indic_rel(lambda, theta)
# pass/fail
indic_rel[[1]]
Result
Individual Item Reliability Fail
# details
indic_rel[[2]]
##       DECO  FOOD ATMOS PRODQU CHOICE  PROF BRAND FRENCH
## Im3  0.878   NaN   NaN    NaN    NaN   NaN   NaN    NaN
## Im4  0.940   NaN   NaN    NaN    NaN   NaN   NaN    NaN
## Im5  0.578   NaN   NaN    NaN    NaN   NaN   NaN    NaN
## Im10   NaN 0.852   NaN    NaN    NaN   NaN   NaN    NaN
## Im14   NaN 0.907   NaN    NaN    NaN   NaN   NaN    NaN
## Im20   NaN   NaN 0.715    NaN    NaN   NaN   NaN    NaN
## Im21   NaN   NaN 0.614    NaN    NaN   NaN   NaN    NaN
## Im22   NaN   NaN 0.769    NaN    NaN   NaN   NaN    NaN
## Im11   NaN   NaN   NaN  0.378    NaN   NaN   NaN    NaN
## Im12   NaN   NaN   NaN  0.760    NaN   NaN   NaN    NaN
## Im13   NaN   NaN   NaN  0.731    NaN   NaN   NaN    NaN
## Im1    NaN   NaN   NaN    NaN  0.960   NaN   NaN    NaN
## Im2    NaN   NaN   NaN    NaN  0.808   NaN   NaN    NaN
## Im16   NaN   NaN   NaN    NaN    NaN 0.586   NaN    NaN
## Im19   NaN   NaN   NaN    NaN    NaN 0.733   NaN    NaN
## Im17   NaN   NaN   NaN    NaN    NaN   NaN 0.938    NaN
## Im18   NaN   NaN   NaN    NaN    NaN   NaN 0.733    NaN
## Im6    NaN   NaN   NaN    NaN    NaN   NaN   NaN  0.661
## Im7    NaN   NaN   NaN    NaN    NaN   NaN   NaN  0.912

We have only one problematic item which is item Im11 with factor Product Quality but its Individual Item Reliability is close enough to the 0.4 limit.

Construct reliability criterion

# calculate construct reliability (should be above .6)
construct_rel <- f_construct_rel(lambda,theta)
# pass/fail
construct_rel[[1]]
Result
Construct Reliability Pass
# details
construct_rel[[2]]
##               DECO      FOOD     ATMOS  PRODQUAL    CHOICE      PROF    BRAND
## DECO     0.9215974       NaN       NaN       NaN       NaN       NaN      NaN
## FOOD           NaN 0.9359401       NaN       NaN       NaN       NaN      NaN
## ATMOS          NaN       NaN 0.8742538       NaN       NaN       NaN      NaN
## PRODQUAL       NaN       NaN       NaN 0.8289772       NaN       NaN      NaN
## CHOICE         NaN       NaN       NaN       NaN 0.9384579       NaN      NaN
## PROF           NaN       NaN       NaN       NaN       NaN 0.7945651      NaN
## BRAND          NaN       NaN       NaN       NaN       NaN       NaN 0.910291
## FRENCH         NaN       NaN       NaN       NaN       NaN       NaN      NaN
##             FRENCH
## DECO           NaN
## FOOD           NaN
## ATMOS          NaN
## PRODQUAL       NaN
## CHOICE         NaN
## PROF           NaN
## BRAND          NaN
## FRENCH   0.8799457

Average Variance Extracted criterion

# calculate Average Variance Extracted (should be above .5)
AVE <- f_AVE(lambda,theta)
# pass/fail
AVE[[1]]
Result
Average Variance Extracted Pass
# details
diag(AVE[[2]])
##      DECO      FOOD     ATMOS  PRODQUAL    CHOICE      PROF     BRAND    FRENCH 
## 0.7983933 0.8796192 0.6990218 0.6229770 0.8842421 0.6598497 0.8358722 0.7867070

Construct correlations

# correlations between constructs (factors...) should be lower than .7
construct_cor <- f_construct_corr(psi)
# pass / fail
construct_cor[[1]]
Result
Construct Correlations Pass
# details
construct_cor[[2]]
##           DECO  FOOD ATMOS PRODQU CHOICE  PROF BRAND FRENCH
## DECO     1.000                                             
## FOOD     0.416 1.000                                       
## ATMOS    0.467 0.295 1.000                                 
## PRODQUAL 0.471 0.452 0.418  1.000                          
## CHOICE   0.441 0.309 0.448  0.478  1.000                   
## PROF     0.653 0.498 0.478  0.529  0.597 1.000             
## BRAND    0.517 0.325 0.516  0.566  0.519 0.601 1.000       
## FRENCH   0.334 0.585 0.333  0.306  0.225 0.366 0.322  1.000

Fornell-Larcker Criteria

# AVE should be higher than squared correlations between constructs
fornell_larcker <- f_fornell_larcker(psi,AVE[[2]])
# pass / fail
fornell_larcker[[1]]
Result
Fornell-Larcker Criteria Pass
# details (note: AVE is in the diagonals)
fornell_larcker[[2]]
##           DECO  FOOD ATMOS PRODQU CHOICE  PROF BRAND FRENCH
## DECO     0.798                                             
## FOOD     0.173 0.880                                       
## ATMOS    0.218 0.087 0.699                                 
## PRODQUAL 0.222 0.205 0.175  0.623                          
## CHOICE   0.194 0.096 0.201  0.228  0.884                   
## PROF     0.426 0.248 0.228  0.280  0.356 0.660             
## BRAND    0.268 0.106 0.267  0.321  0.270 0.361 0.836       
## FRENCH   0.111 0.343 0.111  0.093  0.051 0.134 0.104  0.787

Modification indices

arrange(modificationindices(fit_CFA),-mi) |> filter(mi>10)
##       lhs op  rhs     mi    epc sepc.lv sepc.all sepc.nox
## 1   BRAND =~ Im13 23.832  0.220   0.265    0.220    0.220
## 2    Im11 ~~ Im13 21.323 -0.191  -0.191   -0.338   -0.338
## 3   BRAND =~ Im12 17.245 -0.179  -0.216   -0.190   -0.190
## 4    Im21 ~~ Im22 15.139 -0.285  -0.285   -0.455   -0.455
## 5  CHOICE =~ Im20 14.777 -0.151  -0.197   -0.132   -0.132
## 6  CHOICE =~ Im13 13.970  0.133   0.174    0.144    0.144
## 7    Im11 ~~ Im12 13.307  0.145   0.145    0.288    0.288
## 8    FOOD =~ Im11 12.742  0.215   0.174    0.152    0.152
## 9    Im20 ~~ Im21 11.455  0.228   0.228    0.335    0.335
## 10  ATMOS =~ Im12 10.952 -0.115  -0.145   -0.127   -0.127
## 11   Im13 ~~  Im1 10.707  0.068   0.068    0.409    0.409
## 12 CHOICE =~ Im12 10.663 -0.111  -0.145   -0.127   -0.127

All the modification indices are pretty low. In addition, the highest ones would suggest we should move some items around like for example move Im13 to the Brand Image factor, but this actually makes the model worse.

So luckily the model found in the exploratory phase is good enough and we decide to stick with these dimensions which again, are the following:

QUESTION 1: Dimensions by which Galeries Lafayette is perceived

fact_interpretation <- c("Decoration","Gourmet Food","Relaxed Atmosphere",
                    "Product Quality","Choice Range","Brand Image",
                    "Frenchness","Professionalism")

names(fact_interpretation) <- c("MR1","MR2","MR3",
                           "MR4","MR5","MR6",
                           "MR7","MR8")


f_factor_interp(PAFn[["8"]], labels,fact_interpretation)
Variable Label_short Loads_on Interpretation
Im15 Professional Selection of Brands excluded
Im8 Expertise in French Traditional Cuisine excluded
Im9 French Fashion excluded
Im3 Artistic Decoration of Sales Area MR1 Decoration
Im4 Creative Decoration of Sales Area MR1 Decoration
Im5 Appealing Arrangement of Shop Windows MR1 Decoration
Im10 Gourmet Food MR2 Gourmet Food
Im14 Gourmet specialities MR2 Gourmet Food
Im20 Relaxing Shopping MR3 Relaxed Atmosphere
Im21 A Great Place to Stroll MR3 Relaxed Atmosphere
Im22 Intimate Shop Atmosphere MR3 Relaxed Atmosphere
Im11 High-quality Cosmetics MR4 Product Quality
Im12 Luxury brands MR4 Product Quality
Im13 Up tp date Designer Brands MR4 Product Quality
Im1 Large Assortment MR5 Choice Range
Im2 Assortment Variety MR5 Choice Range
Im17 Are Trendy MR6 Brand Image
Im18 Are Hip MR6 Brand Image
Im6 France MR7 Frenchness
Im7 French Savoir-vivre MR7 Frenchness
Im16 Professional Appearance Towards Customers MR8 Professionalism
Im19 Professional Organization MR8 Professionalism

SEM

We now want to understand the effect and importance of these dimensions of perception on two variables of interest for the business Repurchase intention and Co-creation intention.

Our model will include 2 mediating variables: Customer Satisfaction and Affective Commitment that interface between the dimensions of perception and variables of interest for the business (the outcome variables of our model).

ROUND 1

Model

We start with a full model where perception dimensions can have both direct and indirect effects on the outcome variables.

We include previously excluded variables Im8, Im9, Im15 to see if they might be important for the outcomes. It is not because they cannot be reduced to factors that they cannot potentially be important items influencing the outcomes.

# Full model
model_SEM <- "
DECO =~ Im3 + Im4 + Im5
FOOD =~ Im10 + Im14
ATMOS =~ Im20 + Im21 + Im22
PRODQUAL =~ Im11 + Im12 + Im13
CHOICE =~ Im1 + Im2
PROF =~ Im16 + Im19
BRAND =~ Im17 + Im18
FRENCH =~ Im6 + Im7

AFCOM =~ COM_A1 + COM_A2 + COM_A3 + COM_A4
SAT =~ SAT_1 + SAT_2 + SAT_3
RI =~ C_REP1 + C_REP2 + C_REP3
COI =~ C_CR1 + C_CR3 + C_CR4

SAT ~ s1*DECO + s2*FOOD + s3*ATMOS + s4*PRODQUAL + s5*CHOICE + s6*PROF + s7*BRAND + s8*FRENCH + si8*Im8 + si15*Im15 + si9*Im9
AFCOM ~ a1*DECO + a2*FOOD + a3*ATMOS + a4*PRODQUAL + a5*CHOICE + a6*PROF + a7*BRAND + a8*FRENCH + ai8*Im8 + ai15*Im15 + ai9*Im9

RI ~ rs*SAT + ra*AFCOM + r01*DECO + r02*FOOD + r03*ATMOS + r04*PRODQUAL + r05*CHOICE + r06*PROF + r07*BRAND + r08*FRENCH + r0i8*Im8 + r0i15*Im15 + r0i9*Im9
COI ~ cs*SAT + ca*AFCOM + c01*DECO + c02*FOOD + c03*ATMOS + c04*PRODQUAL + c05*CHOICE + c06*PROF + c07*BRAND + c08*FRENCH + c0i8*Im8 + c0i15*Im15 + c0i9*Im9

rss1:= rs*s1
raa1:= ra*a1
css1:= cs*s1
caa1:= ca*a1
DECOtoRI_total:= r01 + rss1 + raa1
DECOtoCOI_total:= c01 + css1 + caa1

rss2:= rs*s2
raa2:= ra*a2
css2:= cs*s2
caa2:= ca*a2
FOODtoRI_total:= r02 + rss2 + raa2
FOODtoCOI_total:= c02 + css2 + caa2

rss3:= rs*s3
raa3:= ra*a3
css3:= cs*s3
caa3:= ca*a3
ATMOStoRI_total:= r03 + rss3 + raa3
ATMOStoCOI_total:= c03 + css3 + caa3

rss4:= rs*s4
raa4:= ra*a4
css4:= cs*s4
caa4:= ca*a4
PQUALtoRI_total:= r04 + rss4 + raa4
PQUALtoCOI_total:= c04 + css4 + caa4

rss5:= rs*s5
raa5:= ra*a5
css5:= cs*s5
caa5:= ca*a5
CHOICEtoRI_total:= r05 + rss5 + raa5
CHOICEtoCOI_total:= c05 + css5 + caa5

rss6:= rs*s6
raa6:= ra*a6
css6:= cs*s6
caa6:= ca*a6
PROFtoRI_total:= r06 + rss6 + raa6
PROFtoCOI_total:= c06 + css6 + caa6

rss7:= rs*s7
raa7:= ra*a7
css7:= cs*s7
caa7:= ca*a7
BRANDtoRI_total:= r07 + rss7 + raa7
BRANDtoCOI_total:= c07 + css7 + caa7

rss8:= rs*s8
raa8:= ra*a8
css8:= cs*s8
caa8:= ca*a8
FRENCHtoRI_total:= r08 + rss8 + raa8
FRENCHtoCOI_total:= c08 + css8 + caa8

rssi8:= rs*si8
raai8:= ra*ai8
cssi8:= cs*si8
caai8:= ca*ai8
Im8toRI_total:= r0i8 + rssi8 + raai8
Im8toCOI_total:= c0i8 + cssi8 + caai8

rssi9:= rs*si9
raai9:= ra*ai9
cssi9:= cs*si9
caai9:= ca*ai9
Im9toRI_total:= r0i9 + rssi9 + raai9
Im9toCOI_total:= c0i9 + cssi9 + caai9

rssi15:= rs*si15
raai15:= ra*ai15
cssi15:= cs*si15
caai15:= ca*ai15
Im15toRI_total:= r0i15 + rssi15 + raai15
Im15toCOI_total:= c0i15 + cssi15 + caai15
"

Fit

fit_SEM <- cfa(model_SEM, data=survey, missing="ML")

SEM plot

semPaths(fit_SEM, what = "col", whatLabels = "par", style = "ram",
         rotation = 2, layout = "tree3",
         mar = c(1, 2, 1, 2), #margins
         nCharNodes = 7,
         shapeMan = "rectangle", # variable shape
         sizeMan = 4, # variable shape size
         sizeMan2 = 3, # variable shape vertical stretch
         # structural = T, # don't plot image variables (manifests)
         sizeInt = 1, # intercept size
         intercepts = F, # don't include intercepts
         sizeLat = 5, #factor size
         asize = 2, # arrow size
         curvePivot=T, # edge broken curve
         edge.label.cex = .5, # edge label size
         # edge.color = "skyblue4",
         # levels= c(1,2,7,8,9,10),
         groups = "latents",
         cut = .5 #cutoff for edges,
         )

Let us now assess this model

Global fit measures

global_fit_measures <- f_global_fit_measures(fit_SEM)
# check global fit pass/fail of global fit measures
global_fit_measures[[1]]
Value Result
pvalue 0.000 FAIL
chisq 1863.685
cfi 0.886 Definitely reject the model
rmsea 0.074 Acceptable fit

Regression results and full summary

# output full summary
global_fit_measures[[2]]
## lavaan 0.6.15 ended normally after 176 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                       173
## 
##                                                   Used       Total
##   Number of observations                           523         553
##   Number of missing patterns                       116            
## 
## Model Test User Model:
##                                                       
##   Test statistic                              1863.685
##   Degrees of freedom                               483
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                             12715.671
##   Degrees of freedom                               592
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.886
##   Tucker-Lewis Index (TLI)                       0.860
##                                                       
##   Robust Comparative Fit Index (CFI)             0.888
##   Robust Tucker-Lewis Index (TLI)                0.863
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -21205.949
##   Loglikelihood unrestricted model (H1)     -20274.106
##                                                       
##   Akaike (AIC)                               42757.897
##   Bayesian (BIC)                             43494.805
##   Sample-size adjusted Bayesian (SABIC)      42945.662
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.074
##   90 Percent confidence interval - lower         0.070
##   90 Percent confidence interval - upper         0.077
##   P-value H_0: RMSEA <= 0.050                    0.000
##   P-value H_0: RMSEA >= 0.080                    0.002
##                                                       
##   Robust RMSEA                                   0.074
##   90 Percent confidence interval - lower         0.071
##   90 Percent confidence interval - upper         0.078
##   P-value H_0: Robust RMSEA <= 0.050             0.000
##   P-value H_0: Robust RMSEA >= 0.080             0.007
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.137
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   DECO =~                                                               
##     Im3               1.000                               1.247    0.942
##     Im4               1.049    0.025   42.420    0.000    1.309    0.967
##     Im5               0.802    0.034   23.246    0.000    1.000    0.757
##   FOOD =~                                                               
##     Im10              1.000                               0.822    0.927
##     Im14              1.001    0.035   28.365    0.000    0.824    0.954
##   ATMOS =~                                                              
##     Im20              1.000                               1.256    0.845
##     Im21              0.853    0.042   20.438    0.000    1.071    0.783
##     Im22              1.079    0.047   23.137    0.000    1.356    0.886
##   PRODQUAL =~                                                           
##     Im11              1.000                               0.712    0.619
##     Im12              1.385    0.093   14.902    0.000    0.986    0.872
##     Im13              1.450    0.104   13.935    0.000    1.033    0.858
##   CHOICE =~                                                             
##     Im1               1.000                               1.297    0.976
##     Im2               0.886    0.033   26.860    0.000    1.149    0.899
##   PROF =~                                                               
##     Im16              1.000                               0.929    0.768
##     Im19              1.042    0.059   17.538    0.000    0.968    0.854
##   BRAND =~                                                              
##     Im17              1.000                               1.204    0.968
##     Im18              0.996    0.042   23.568    0.000    1.200    0.857
##   FRENCH =~                                                             
##     Im6               1.000                               0.975    0.810
##     Im7               1.192    0.072   16.507    0.000    1.162    0.960
##   AFCOM =~                                                              
##     COM_A1            1.000                               1.116    0.789
##     COM_A2            1.171    0.056   21.068    0.000    1.307    0.829
##     COM_A3            1.154    0.059   19.566    0.000    1.288    0.811
##     COM_A4            1.291    0.063   20.389    0.000    1.441    0.840
##   SAT =~                                                                
##     SAT_1             1.000                               0.845    0.855
##     SAT_2             0.940    0.050   18.659    0.000    0.795    0.807
##     SAT_3             0.841    0.054   15.434    0.000    0.711    0.643
##   RI =~                                                                 
##     C_REP1            1.000                               0.588    0.806
##     C_REP2            0.982    0.045   21.739    0.000    0.577    0.934
##     C_REP3            0.719    0.038   18.680    0.000    0.422    0.761
##   COI =~                                                                
##     C_CR1             1.000                               1.682    0.851
##     C_CR3             1.029    0.052   19.721    0.000    1.730    0.829
##     C_CR4             0.958    0.050   19.155    0.000    1.610    0.805
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   SAT ~                                                                 
##     DECO      (s1)   -0.098    0.044   -2.242    0.025   -0.144   -0.144
##     FOOD      (s2)    0.077    0.073    1.053    0.292    0.075    0.075
##     ATMOS     (s3)    0.035    0.039    0.882    0.378    0.052    0.052
##     PRODQUA   (s4)   -0.044    0.079   -0.559    0.576   -0.037   -0.037
##     CHOICE    (s5)    0.118    0.042    2.775    0.006    0.181    0.181
##     PROF      (s6)    0.404    0.091    4.454    0.000    0.444    0.444
##     BRAND     (s7)    0.019    0.046    0.422    0.673    0.028    0.028
##     FRENCH    (s8)    0.076    0.059    1.301    0.193    0.088    0.088
##     Im8      (si8)    0.032    0.055    0.595    0.552    0.038    0.040
##     Im15    (si15)    0.057    0.046    1.252    0.210    0.068    0.081
##     Im9      (si9)    0.002    0.033    0.073    0.942    0.003    0.004
##   AFCOM ~                                                               
##     DECO      (a1)   -0.020    0.056   -0.363    0.717   -0.023   -0.023
##     FOOD      (a2)    0.009    0.095    0.092    0.926    0.006    0.006
##     ATMOS     (a3)    0.374    0.054    6.929    0.000    0.421    0.421
##     PRODQUA   (a4)   -0.195    0.104   -1.876    0.061   -0.124   -0.124
##     CHOICE    (a5)    0.086    0.055    1.555    0.120    0.100    0.100
##     PROF      (a6)    0.128    0.112    1.140    0.254    0.107    0.107
##     BRAND     (a7)   -0.016    0.060   -0.272    0.785   -0.018   -0.018
##     FRENCH    (a8)    0.162    0.077    2.099    0.036    0.142    0.142
##     Im8      (ai8)    0.067    0.072    0.932    0.351    0.060    0.063
##     Im15    (ai15)    0.024    0.060    0.401    0.689    0.021    0.026
##     Im9      (ai9)    0.022    0.044    0.508    0.612    0.020    0.027
##   RI ~                                                                  
##     SAT       (rs)    0.191    0.044    4.322    0.000    0.275    0.275
##     AFCOM     (ra)    0.186    0.030    6.163    0.000    0.353    0.353
##     DECO     (r01)    0.007    0.029    0.228    0.820    0.014    0.014
##     FOOD     (r02)    0.009    0.049    0.178    0.858    0.012    0.012
##     ATMOS    (r03)    0.039    0.029    1.344    0.179    0.083    0.083
##     PRODQUA  (r04)    0.116    0.053    2.198    0.028    0.141    0.141
##     CHOICE   (r05)   -0.020    0.028   -0.737    0.461   -0.045   -0.045
##     PROF     (r06)   -0.019    0.061   -0.311    0.756   -0.030   -0.030
##     BRAND    (r07)    0.007    0.030    0.243    0.808    0.015    0.015
##     FRENCH   (r08)   -0.037    0.039   -0.942    0.346   -0.061   -0.061
##     Im8     (r0i8)    0.047    0.037    1.276    0.202    0.079    0.083
##     Im15    (r015)   -0.005    0.030   -0.154    0.878   -0.008   -0.009
##     Im9     (r0i9)   -0.047    0.022   -2.110    0.035   -0.081   -0.109
##   COI ~                                                                 
##     SAT       (cs)   -0.361    0.134   -2.705    0.007   -0.182   -0.182
##     AFCOM     (ca)    0.539    0.093    5.810    0.000    0.358    0.358
##     DECO     (c01)    0.014    0.093    0.155    0.877    0.011    0.011
##     FOOD     (c02)   -0.058    0.154   -0.377    0.706   -0.028   -0.028
##     ATMOS    (c03)    0.146    0.092    1.593    0.111    0.109    0.109
##     PRODQUA  (c04)    0.260    0.168    1.545    0.122    0.110    0.110
##     CHOICE   (c05)   -0.005    0.089   -0.053    0.957   -0.004   -0.004
##     PROF     (c06)   -0.200    0.193   -1.033    0.302   -0.110   -0.110
##     BRAND    (c07)    0.036    0.096    0.376    0.707    0.026    0.026
##     FRENCH   (c08)   -0.107    0.125   -0.862    0.388   -0.062   -0.062
##     Im8     (c0i8)   -0.016    0.116   -0.138    0.890   -0.010   -0.010
##     Im15    (c015)   -0.057    0.098   -0.581    0.561   -0.034   -0.040
##     Im9     (c0i9)   -0.016    0.072   -0.222    0.825   -0.009   -0.013
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   DECO ~~                                                               
##     FOOD              0.425    0.052    8.167    0.000    0.414    0.414
##     ATMOS             0.738    0.084    8.773    0.000    0.471    0.471
##     PRODQUAL          0.418    0.053    7.874    0.000    0.471    0.471
##     CHOICE            0.731    0.081    8.987    0.000    0.452    0.452
##     PROF              0.767    0.074   10.398    0.000    0.662    0.662
##     BRAND             0.785    0.079    9.990    0.000    0.523    0.523
##     FRENCH            0.409    0.066    6.243    0.000    0.337    0.337
##   FOOD ~~                                                               
##     ATMOS             0.308    0.052    5.887    0.000    0.298    0.298
##     PRODQUAL          0.263    0.035    7.452    0.000    0.448    0.448
##     CHOICE            0.310    0.051    6.054    0.000    0.291    0.291
##     PROF              0.386    0.045    8.516    0.000    0.505    0.505
##     BRAND             0.322    0.048    6.639    0.000    0.325    0.325
##     FRENCH            0.471    0.049    9.658    0.000    0.587    0.587
##   ATMOS ~~                                                              
##     PRODQUAL          0.389    0.055    7.110    0.000    0.435    0.435
##     CHOICE            0.752    0.086    8.722    0.000    0.462    0.462
##     PROF              0.554    0.070    7.941    0.000    0.475    0.475
##     BRAND             0.795    0.083    9.629    0.000    0.526    0.526
##     FRENCH            0.409    0.066    6.222    0.000    0.334    0.334
##   PRODQUAL ~~                                                           
##     CHOICE            0.443    0.055    8.006    0.000    0.480    0.480
##     PROF              0.358    0.045    7.902    0.000    0.541    0.541
##     BRAND             0.481    0.055    8.826    0.000    0.561    0.561
##     FRENCH            0.217    0.039    5.608    0.000    0.313    0.313
##   CHOICE ~~                                                             
##     PROF              0.728    0.074    9.819    0.000    0.605    0.605
##     BRAND             0.805    0.080   10.022    0.000    0.516    0.516
##     FRENCH            0.272    0.061    4.438    0.000    0.215    0.215
##   PROF ~~                                                               
##     BRAND             0.672    0.068    9.851    0.000    0.601    0.601
##     FRENCH            0.333    0.053    6.323    0.000    0.367    0.367
##   BRAND ~~                                                              
##     FRENCH            0.373    0.063    5.938    0.000    0.318    0.318
##  .RI ~~                                                                 
##    .COI              -0.025    0.039   -0.630    0.529   -0.034   -0.034
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Im3               4.983    0.058   85.740    0.000    4.983    3.762
##    .Im4               4.995    0.059   84.295    0.000    4.995    3.692
##    .Im5               5.049    0.058   86.541    0.000    5.049    3.823
##    .Im10              6.093    0.039  156.804    0.000    6.093    6.865
##    .Im14              6.139    0.038  161.829    0.000    6.139    7.109
##    .Im20              4.705    0.065   72.271    0.000    4.705    3.166
##    .Im21              5.163    0.060   86.178    0.000    5.163    3.775
##    .Im22              4.305    0.067   63.987    0.000    4.305    2.814
##    .Im11              5.652    0.051  111.594    0.000    5.652    4.907
##    .Im12              5.666    0.050  113.818    0.000    5.666    5.010
##    .Im13              5.450    0.053  103.088    0.000    5.450    4.526
##    .Im1               4.808    0.058   82.565    0.000    4.808    3.618
##    .Im2               4.878    0.056   86.961    0.000    4.878    3.814
##    .Im16              5.150    0.053   96.420    0.000    5.150    4.260
##    .Im19              5.158    0.050  103.711    0.000    5.158    4.551
##    .Im17              5.044    0.054   92.559    0.000    5.044    4.056
##    .Im18              4.603    0.062   74.674    0.000    4.603    3.289
##    .Im6               5.821    0.053  110.235    0.000    5.821    4.835
##    .Im7               5.760    0.053  108.103    0.000    5.760    4.761
##    .COM_A1            3.662    0.540    6.781    0.000    3.662    2.590
##    .COM_A2            3.159    0.632    4.997    0.000    3.159    2.005
##    .COM_A3            2.819    0.623    4.525    0.000    2.819    1.774
##    .COM_A4            2.658    0.695    3.823    0.000    2.658    1.550
##    .SAT_1             4.845    0.411   11.786    0.000    4.845    4.902
##    .SAT_2             5.012    0.385   13.012    0.000    5.012    5.088
##    .SAT_3             5.054    0.347   14.556    0.000    5.054    4.573
##    .C_REP1            4.047    0.293   13.797    0.000    4.047    5.552
##    .C_REP2            4.280    0.287   14.889    0.000    4.280    6.927
##    .C_REP3            4.505    0.211   21.340    0.000    4.505    8.120
##    .C_CR1             3.002    0.913    3.289    0.001    3.002    1.519
##    .C_CR3             3.603    0.939    3.836    0.000    3.603    1.726
##    .C_CR4             3.101    0.874    3.547    0.000    3.101    1.549
##     DECO              0.000                               0.000    0.000
##     FOOD              0.000                               0.000    0.000
##     ATMOS             0.000                               0.000    0.000
##     PRODQUAL          0.000                               0.000    0.000
##     CHOICE            0.000                               0.000    0.000
##     PROF              0.000                               0.000    0.000
##     BRAND             0.000                               0.000    0.000
##     FRENCH            0.000                               0.000    0.000
##    .AFCOM             0.000                               0.000    0.000
##    .SAT               0.000                               0.000    0.000
##    .RI                0.000                               0.000    0.000
##    .COI               0.000                               0.000    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Im3               0.198    0.025    8.058    0.000    0.198    0.113
##    .Im4               0.118    0.025    4.775    0.000    0.118    0.064
##    .Im5               0.744    0.050   14.899    0.000    0.744    0.427
##    .Im10              0.111    0.020    5.669    0.000    0.111    0.141
##    .Im14              0.068    0.019    3.580    0.000    0.068    0.091
##    .Im20              0.630    0.059   10.704    0.000    0.630    0.285
##    .Im21              0.724    0.058   12.566    0.000    0.724    0.387
##    .Im22              0.503    0.061    8.276    0.000    0.503    0.215
##    .Im11              0.819    0.057   14.460    0.000    0.819    0.617
##    .Im12              0.306    0.039    7.837    0.000    0.306    0.239
##    .Im13              0.382    0.045    8.579    0.000    0.382    0.264
##    .Im1               0.084    0.049    1.705    0.088    0.084    0.048
##    .Im2               0.314    0.043    7.277    0.000    0.314    0.192
##    .Im16              0.599    0.052   11.542    0.000    0.599    0.409
##    .Im19              0.347    0.045    7.745    0.000    0.347    0.270
##    .Im17              0.097    0.046    2.105    0.035    0.097    0.063
##    .Im18              0.520    0.056    9.255    0.000    0.520    0.265
##    .Im6               0.498    0.057    8.699    0.000    0.498    0.344
##    .Im7               0.113    0.068    1.666    0.096    0.113    0.077
##    .COM_A1            0.754    0.060   12.580    0.000    0.754    0.377
##    .COM_A2            0.776    0.067   11.552    0.000    0.776    0.312
##    .COM_A3            0.866    0.071   12.145    0.000    0.866    0.343
##    .COM_A4            0.863    0.077   11.218    0.000    0.863    0.294
##    .SAT_1             0.262    0.034    7.705    0.000    0.262    0.268
##    .SAT_2             0.338    0.034    9.853    0.000    0.338    0.349
##    .SAT_3             0.716    0.053   13.634    0.000    0.716    0.586
##    .C_REP1            0.186    0.016   11.320    0.000    0.186    0.350
##    .C_REP2            0.049    0.011    4.657    0.000    0.049    0.128
##    .C_REP3            0.129    0.009   13.622    0.000    0.129    0.420
##    .C_CR1             1.076    0.119    9.063    0.000    1.076    0.276
##    .C_CR3             1.362    0.134   10.152    0.000    1.362    0.313
##    .C_CR4             1.412    0.128   11.028    0.000    1.412    0.353
##     DECO              1.556    0.110   14.096    0.000    1.000    1.000
##     FOOD              0.676    0.052   13.094    0.000    1.000    1.000
##     ATMOS             1.578    0.138   11.424    0.000    1.000    1.000
##     PRODQUAL          0.508    0.070    7.277    0.000    1.000    1.000
##     CHOICE            1.681    0.120   14.033    0.000    1.000    1.000
##     PROF              0.863    0.090    9.550    0.000    1.000    1.000
##     BRAND             1.449    0.106   13.646    0.000    1.000    1.000
##     FRENCH            0.951    0.097    9.789    0.000    1.000    1.000
##    .AFCOM             0.884    0.090    9.820    0.000    0.710    0.710
##    .SAT               0.459    0.049    9.461    0.000    0.642    0.642
##    .RI                0.232    0.022   10.542    0.000    0.672    0.672
##    .COI               2.331    0.219   10.631    0.000    0.824    0.824
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     rss1             -0.019    0.009   -1.984    0.047   -0.040   -0.040
##     raa1             -0.004    0.010   -0.362    0.717   -0.008   -0.008
##     css1              0.035    0.020    1.737    0.082    0.026    0.026
##     caa1             -0.011    0.030   -0.362    0.717   -0.008   -0.008
##     DECOtoRI_total   -0.016    0.031   -0.517    0.605   -0.034   -0.034
##     DECOtoCOI_totl    0.039    0.095    0.408    0.683    0.029    0.029
##     rss2              0.015    0.014    1.022    0.307    0.021    0.021
##     raa2              0.002    0.018    0.092    0.926    0.002    0.002
##     css2             -0.028    0.028   -0.979    0.327   -0.014   -0.014
##     caa2              0.005    0.051    0.092    0.926    0.002    0.002
##     FOODtoRI_total    0.025    0.052    0.479    0.632    0.035    0.035
##     FOODtoCOI_totl   -0.081    0.161   -0.504    0.614   -0.040   -0.040
##     rss3              0.007    0.008    0.867    0.386    0.014    0.014
##     raa3              0.069    0.015    4.716    0.000    0.148    0.148
##     css3             -0.013    0.015   -0.834    0.404   -0.009   -0.009
##     caa3              0.201    0.044    4.567    0.000    0.150    0.150
##     ATMOStoRI_totl    0.115    0.029    3.970    0.000    0.246    0.246
##     ATMOStoCOI_ttl    0.335    0.088    3.801    0.000    0.250    0.250
##     rss4             -0.008    0.015   -0.553    0.580   -0.010   -0.010
##     raa4             -0.036    0.020   -1.786    0.074   -0.044   -0.044
##     css4              0.016    0.029    0.549    0.583    0.007    0.007
##     caa4             -0.105    0.059   -1.779    0.075   -0.044   -0.044
##     PQUALtoRI_totl    0.072    0.056    1.283    0.199    0.087    0.087
##     PQUALtoCOI_ttl    0.171    0.173    0.984    0.325    0.072    0.072
##     rss5              0.023    0.010    2.369    0.018    0.050    0.050
##     raa5              0.016    0.011    1.509    0.131    0.035    0.035
##     css5             -0.043    0.022   -1.930    0.054   -0.033   -0.033
##     caa5              0.046    0.031    1.510    0.131    0.036    0.036
##     CHOICEtoRI_ttl    0.018    0.030    0.612    0.541    0.040    0.040
##     CHOICEtCOI_ttl   -0.001    0.093   -0.013    0.990   -0.001   -0.001
##     rss6              0.077    0.025    3.070    0.002    0.122    0.122
##     raa6              0.024    0.021    1.123    0.262    0.038    0.038
##     css6             -0.146    0.062   -2.350    0.019   -0.081   -0.081
##     caa6              0.069    0.062    1.112    0.266    0.038    0.038
##     PROFtoRI_total    0.082    0.061    1.344    0.179    0.130    0.130
##     PROFtoCOI_totl   -0.277    0.185   -1.492    0.136   -0.153   -0.153
##     rss7              0.004    0.009    0.419    0.675    0.008    0.008
##     raa7             -0.003    0.011   -0.272    0.786   -0.006   -0.006
##     css7             -0.007    0.017   -0.417    0.677   -0.005   -0.005
##     caa7             -0.009    0.032   -0.272    0.786   -0.006   -0.006
##     BRANDtoRI_totl    0.008    0.032    0.247    0.805    0.016    0.016
##     BRANDtoCOI_ttl    0.020    0.101    0.203    0.839    0.015    0.015
##     rss8              0.015    0.012    1.246    0.213    0.024    0.024
##     raa8              0.030    0.015    1.990    0.047    0.050    0.050
##     css8             -0.028    0.023   -1.178    0.239   -0.016   -0.016
##     caa8              0.088    0.044    1.973    0.048    0.051    0.051
##     FRENCHtoRI_ttl    0.008    0.042    0.194    0.846    0.013    0.013
##     FRENCHtCOI_ttl   -0.047    0.129   -0.368    0.713   -0.028   -0.028
##     rssi8             0.006    0.011    0.591    0.555    0.011    0.011
##     raai8             0.012    0.013    0.923    0.356    0.021    0.022
##     cssi8            -0.012    0.020   -0.580    0.562   -0.007   -0.007
##     caai8             0.036    0.039    0.923    0.356    0.021    0.023
##     Im8toRI_total     0.065    0.039    1.666    0.096    0.111    0.117
##     Im8toCOI_total    0.008    0.122    0.068    0.946    0.005    0.005
##     rssi9             0.000    0.006    0.073    0.942    0.001    0.001
##     raai9             0.004    0.008    0.506    0.613    0.007    0.010
##     cssi9            -0.001    0.012   -0.073    0.942   -0.001   -0.001
##     caai9             0.012    0.024    0.506    0.613    0.007    0.010
##     Im9toRI_total    -0.043    0.024   -1.782    0.075   -0.073   -0.099
##     Im9toCOI_total   -0.005    0.075   -0.063    0.950   -0.003   -0.004
##     rssi15            0.011    0.009    1.212    0.226    0.019    0.022
##     raai15            0.004    0.011    0.400    0.689    0.008    0.009
##     cssi15           -0.021    0.018   -1.137    0.256   -0.012   -0.015
##     caai15            0.013    0.032    0.400    0.689    0.008    0.009
##     Im15toRI_total    0.011    0.033    0.330    0.742    0.018    0.022
##     Im15toCOI_totl   -0.065    0.102   -0.631    0.528   -0.038   -0.046

local fit measures

lambda = inspect(fit_SEM, what="std")$lambda
theta = inspect(fit_SEM, what="std")$theta
psi = inspect(fit_SEM, what="std")$psi

Indicator reliability criterion (Individual Item Reliability)

# calculate indicator reliabilities (should be larger than 0.4)
indic_rel <- f_indic_rel(lambda, theta)
# pass/fail
indic_rel[[1]]
Result
Individual Item Reliability Fail
# details
indic_rel[[2]]
##         DECO  FOOD ATMOS PRODQU CHOICE  PROF BRAND FRENCH AFCOM   SAT    RI
## Im3    0.887   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im4    0.936   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im5    0.573   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im10     NaN 0.859   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im14     NaN 0.909   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im20     NaN   NaN 0.715    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im21     NaN   NaN 0.613    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im22     NaN   NaN 0.785    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im11     NaN   NaN   NaN  0.383    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im12     NaN   NaN   NaN  0.761    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im13     NaN   NaN   NaN  0.736    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im1      NaN   NaN   NaN    NaN  0.952   NaN   NaN    NaN   NaN   NaN   NaN
## Im2      NaN   NaN   NaN    NaN  0.808   NaN   NaN    NaN   NaN   NaN   NaN
## Im16     NaN   NaN   NaN    NaN    NaN 0.591   NaN    NaN   NaN   NaN   NaN
## Im19     NaN   NaN   NaN    NaN    NaN 0.730   NaN    NaN   NaN   NaN   NaN
## Im17     NaN   NaN   NaN    NaN    NaN   NaN 0.937    NaN   NaN   NaN   NaN
## Im18     NaN   NaN   NaN    NaN    NaN   NaN 0.735    NaN   NaN   NaN   NaN
## Im6      NaN   NaN   NaN    NaN    NaN   NaN   NaN  0.656   NaN   NaN   NaN
## Im7      NaN   NaN   NaN    NaN    NaN   NaN   NaN  0.923   NaN   NaN   NaN
## COM_A1   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.623   NaN   NaN
## COM_A2   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.688   NaN   NaN
## COM_A3   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.657   NaN   NaN
## COM_A4   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.706   NaN   NaN
## SAT_1    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN 0.732   NaN
## SAT_2    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN 0.651   NaN
## SAT_3    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN 0.414   NaN
## C_REP1   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN 0.650
## C_REP2   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN 0.872
## C_REP3   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN 0.580
## C_CR1    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## C_CR3    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## C_CR4    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im8      NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im15     NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im9      NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
##          COI Im8 Im15 Im9
## Im3      NaN NaN  NaN NaN
## Im4      NaN NaN  NaN NaN
## Im5      NaN NaN  NaN NaN
## Im10     NaN NaN  NaN NaN
## Im14     NaN NaN  NaN NaN
## Im20     NaN NaN  NaN NaN
## Im21     NaN NaN  NaN NaN
## Im22     NaN NaN  NaN NaN
## Im11     NaN NaN  NaN NaN
## Im12     NaN NaN  NaN NaN
## Im13     NaN NaN  NaN NaN
## Im1      NaN NaN  NaN NaN
## Im2      NaN NaN  NaN NaN
## Im16     NaN NaN  NaN NaN
## Im19     NaN NaN  NaN NaN
## Im17     NaN NaN  NaN NaN
## Im18     NaN NaN  NaN NaN
## Im6      NaN NaN  NaN NaN
## Im7      NaN NaN  NaN NaN
## COM_A1   NaN NaN  NaN NaN
## COM_A2   NaN NaN  NaN NaN
## COM_A3   NaN NaN  NaN NaN
## COM_A4   NaN NaN  NaN NaN
## SAT_1    NaN NaN  NaN NaN
## SAT_2    NaN NaN  NaN NaN
## SAT_3    NaN NaN  NaN NaN
## C_REP1   NaN NaN  NaN NaN
## C_REP2   NaN NaN  NaN NaN
## C_REP3   NaN NaN  NaN NaN
## C_CR1  0.724 NaN  NaN NaN
## C_CR3  0.687 NaN  NaN NaN
## C_CR4  0.647 NaN  NaN NaN
## Im8      NaN   1  NaN NaN
## Im15     NaN NaN    1 NaN
## Im9      NaN NaN  NaN   1

Construct reliability criterion

# calculate construct reliability (should be above .6)
construct_rel <- f_construct_rel(lambda,theta)
# pass/fail
construct_rel[[1]]
Result
Construct Reliability Pass
# details
construct_rel[[2]]
##              DECO     FOOD     ATMOS  PRODQUAL    CHOICE      PROF     BRAND
## DECO     0.921686      NaN       NaN       NaN       NaN       NaN       NaN
## FOOD          NaN 0.938467       NaN       NaN       NaN       NaN       NaN
## ATMOS         NaN      NaN 0.8769271       NaN       NaN       NaN       NaN
## PRODQUAL      NaN      NaN       NaN 0.8312694       NaN       NaN       NaN
## CHOICE        NaN      NaN       NaN       NaN 0.9361559       NaN       NaN
## PROF          NaN      NaN       NaN       NaN       NaN 0.7947441       NaN
## BRAND         NaN      NaN       NaN       NaN       NaN       NaN 0.9102652
## FRENCH        NaN      NaN       NaN       NaN       NaN       NaN       NaN
## AFCOM         NaN      NaN       NaN       NaN       NaN       NaN       NaN
## SAT           NaN      NaN       NaN       NaN       NaN       NaN       NaN
## RI            NaN      NaN       NaN       NaN       NaN       NaN       NaN
## COI           NaN      NaN       NaN       NaN       NaN       NaN       NaN
## Im8           NaN      NaN       NaN       NaN       NaN       NaN       NaN
## Im15          NaN      NaN       NaN       NaN       NaN       NaN       NaN
## Im9           NaN      NaN       NaN       NaN       NaN       NaN       NaN
##             FRENCH     AFCOM       SAT        RI       COI Im8 Im15 Im9
## DECO           NaN       NaN       NaN       NaN       NaN NaN  NaN NaN
## FOOD           NaN       NaN       NaN       NaN       NaN NaN  NaN NaN
## ATMOS          NaN       NaN       NaN       NaN       NaN NaN  NaN NaN
## PRODQUAL       NaN       NaN       NaN       NaN       NaN NaN  NaN NaN
## CHOICE         NaN       NaN       NaN       NaN       NaN NaN  NaN NaN
## PROF           NaN       NaN       NaN       NaN       NaN NaN  NaN NaN
## BRAND          NaN       NaN       NaN       NaN       NaN NaN  NaN NaN
## FRENCH   0.8815253       NaN       NaN       NaN       NaN NaN  NaN NaN
## AFCOM          NaN 0.8896815       NaN       NaN       NaN NaN  NaN NaN
## SAT            NaN       NaN 0.8154708       NaN       NaN NaN  NaN NaN
## RI             NaN       NaN       NaN 0.8744045       NaN NaN  NaN NaN
## COI            NaN       NaN       NaN       NaN 0.8677621 NaN  NaN NaN
## Im8            NaN       NaN       NaN       NaN       NaN   1  NaN NaN
## Im15           NaN       NaN       NaN       NaN       NaN NaN    1 NaN
## Im9            NaN       NaN       NaN       NaN       NaN NaN  NaN   1

Average Variance Extracted criterion

# calculate Average Variance Extracted (should be above .5)
AVE <- f_AVE(lambda,theta)
# pass/fail
AVE[[1]]
Result
Average Variance Extracted Pass
# details
diag(AVE[[2]])
##      DECO      FOOD     ATMOS  PRODQUAL    CHOICE      PROF     BRAND    FRENCH 
## 0.7986537 0.8840885 0.7042434 0.6266576 0.8801527 0.6600238 0.8358149 0.7893477 
##     AFCOM       SAT        RI       COI       Im8      Im15       Im9 
## 0.6685779 0.5989777 0.7004635 0.6863754 1.0000000 1.0000000 1.0000000

Construct correlations

# correlations between constructs (factors...) should be lower than .7
construct_cor <- f_construct_corr(psi)
# pass / fail
construct_cor[[1]]
Result
Construct Correlations Pass
# details
construct_cor[[2]]
##            DECO   FOOD  ATMOS PRODQU CHOICE   PROF  BRAND FRENCH  AFCOM    SAT
## DECO      1.000                                                               
## FOOD      0.414  1.000                                                        
## ATMOS     0.471  0.298  1.000                                                 
## PRODQUAL  0.471  0.448  0.435  1.000                                          
## CHOICE    0.452  0.291  0.462  0.480  1.000                                   
## PROF      0.662  0.505  0.475  0.541  0.605  1.000                            
## BRAND     0.523  0.325  0.526  0.561  0.516  0.601  1.000                     
## FRENCH    0.337  0.587  0.334  0.313  0.215  0.367  0.318  1.000              
## AFCOM     0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.710       
## SAT       0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.642
## RI        0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000
## COI       0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000
## Im8       0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000
## Im15      0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000
## Im9       0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000
##              RI    COI    Im8   Im15    Im9
## DECO                                       
## FOOD                                       
## ATMOS                                      
## PRODQUAL                                   
## CHOICE                                     
## PROF                                       
## BRAND                                      
## FRENCH                                     
## AFCOM                                      
## SAT                                        
## RI        0.672                            
## COI      -0.034  0.824                     
## Im8       0.000  0.000  1.000              
## Im15      0.000  0.000  0.342  1.000       
## Im9       0.000  0.000  0.442  0.397  1.000

Fornell-Larcker Criteria

# AVE should be higher than squared correlations between constructs
fornell_larcker <- f_fornell_larcker(psi,AVE[[2]])
# pass / fail
fornell_larcker[[1]]
Result
Fornell-Larcker Criteria Pass
# details (note: AVE is in the diagonals)
fornell_larcker[[2]]
##           DECO  FOOD ATMOS PRODQU CHOICE  PROF BRAND FRENCH AFCOM   SAT    RI
## DECO     0.799                                                               
## FOOD     0.172 0.884                                                         
## ATMOS    0.222 0.089 0.704                                                   
## PRODQUAL 0.222 0.201 0.189  0.627                                            
## CHOICE   0.204 0.085 0.213  0.230  0.880                                     
## PROF     0.438 0.255 0.225  0.293  0.366 0.660                               
## BRAND    0.273 0.106 0.276  0.315  0.266 0.361 0.836                         
## FRENCH   0.113 0.344 0.111  0.098  0.046 0.135 0.101  0.789                  
## AFCOM    0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.669            
## SAT      0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.599      
## RI       0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.000 0.700
## COI      0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.000 0.001
## Im8      0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.000 0.000
## Im15     0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.000 0.000
## Im9      0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.000 0.000
##            COI   Im8  Im15   Im9
## DECO                            
## FOOD                            
## ATMOS                           
## PRODQUAL                        
## CHOICE                          
## PROF                            
## BRAND                           
## FRENCH                          
## AFCOM                           
## SAT                             
## RI                              
## COI      0.686                  
## Im8      0.000 1.000            
## Im15     0.000 0.117 1.000      
## Im9      0.000 0.195 0.158 1.000

Modification indices

arrange(modificationindices(fit_SEM),-mi) |> filter(mi>10)
##         lhs op      rhs      mi    epc sepc.lv sepc.all sepc.nox
## 1      Im15  ~   CHOICE 183.159  0.499   0.648    0.543    0.543
## 2       Im8  ~     FOOD 165.172  0.650   0.534    0.509    0.509
## 3      Im15  ~     PROF 144.405  0.658   0.611    0.513    0.513
## 4      Im15  ~      SAT 141.622  1.178   0.996    0.836    0.836
## 5       Im8  ~   FRENCH 131.111  0.492   0.480    0.457    0.457
## 6      Im15  ~       RI 126.703  2.198   1.291    1.084    1.084
## 7      Im15  ~    BRAND  87.447  0.374   0.451    0.378    0.378
## 8      Im15  ~ PRODQUAL  85.387  0.649   0.463    0.388    0.388
## 9      Im15  ~    AFCOM  76.869  0.727   0.811    0.681    0.681
## 10     Im15  ~     DECO  69.835  0.321   0.400    0.336    0.336
## 11     Im15  ~    ATMOS  68.865  0.328   0.412    0.346    0.346
## 12     FOOD  ~      Im8  65.017  0.219   0.267    0.280    0.267
## 13   FRENCH  ~      Im8  60.450  0.269   0.276    0.289    0.276
## 14    AFCOM =~   C_REP1  59.740  0.185   0.207    0.284    0.284
## 15   FRENCH  ~    AFCOM  59.527  2.715   3.107    3.107    3.107
## 16     FOOD  ~       RI  52.098  2.996   2.140    2.140    2.140
## 17   C_REP2 ~~   C_REP3  50.550  0.105   0.105    1.324    1.324
## 18   FRENCH  ~      Im9  49.497  0.188   0.193    0.262    0.193
## 19   CHOICE  ~      COI  40.234 -3.741  -4.851   -4.851   -4.851
## 20   CHOICE  ~     Im15  39.667  0.240   0.185    0.221    0.185
## 21     Im16 ~~     Im19  34.438  4.282   4.282    9.391    9.391
## 22      SAT  ~       RI  34.427  1.296   0.901    0.901    0.901
## 23      SAT  ~    AFCOM  34.426  0.240   0.317    0.317    0.317
## 24    AFCOM ~~      SAT  34.426  0.213   0.334    0.334    0.334
## 25    AFCOM  ~      SAT  34.426  0.463   0.351    0.351    0.351
## 26    AFCOM  ~       RI  34.426  2.423   1.275    1.275    1.275
## 27    AFCOM  ~      COI  34.423 -1.282  -1.932   -1.932   -1.932
## 28      Im1 ~~      Im2  34.420 18.676  18.676  114.920  114.920
## 29      SAT  ~      COI  34.420  0.446   0.888    0.888    0.888
## 30      Im6 ~~      Im7  34.413 20.484  20.484   86.144   86.144
## 31      Im9  ~    BRAND  31.665  0.245   0.295    0.217    0.217
## 32     FOOD  ~    AFCOM  31.388  1.549   2.103    2.103    2.103
## 33      Im9  ~   FRENCH  31.242  0.304   0.296    0.218    0.218
## 34   COM_A1 ~~   COM_A2  29.695  0.282   0.282    0.368    0.368
## 35      Im8  ~      SAT  28.978  0.459   0.388    0.370    0.370
## 36      Im9  ~ PRODQUAL  27.649  0.402   0.287    0.211    0.211
## 37     Im15  ~      COI  26.365  0.636   1.069    0.897    0.897
## 38      Im8  ~    AFCOM  23.181  0.343   0.383    0.365    0.365
## 39   CHOICE  ~      SAT  21.757  2.413   1.573    1.573    1.573
## 40    ATMOS =~   C_REP1  21.130  0.092   0.116    0.159    0.159
## 41    BRAND =~     Im13  18.982  0.196   0.235    0.196    0.196
## 42   FRENCH  ~      SAT  17.983  1.753   1.520    1.520    1.520
## 43     Im11 ~~     Im13  17.611 -0.175  -0.175   -0.313   -0.313
## 44     PROF  ~     Im15  17.562  0.114   0.122    0.146    0.122
## 45       RI =~    SAT_2  16.582  0.270   0.159    0.161    0.161
## 46      Im9  ~       RI  16.466  0.863   0.507    0.373    0.373
## 47     PROF  ~      COI  16.252 -1.692  -3.063   -3.063   -3.063
## 48      Im8  ~     PROF  16.089  0.189   0.176    0.167    0.167
## 49 PRODQUAL  ~      Im9  15.723  0.078   0.109    0.148    0.109
## 50    AFCOM =~   C_REP2  15.496 -0.080  -0.090   -0.145   -0.145
## 51   CHOICE =~     Im20  14.579 -0.153  -0.199   -0.134   -0.134
## 52    BRAND =~     Im12  14.319 -0.161  -0.194   -0.172   -0.172
## 53     Im21 ~~     Im22  13.959 -0.240  -0.240   -0.397   -0.397
## 54   C_REP1 ~~   C_REP3  13.821 -0.050  -0.050   -0.325   -0.325
## 55      Im9  ~      COI  13.779  0.501   0.842    0.619    0.619
## 56      Im8  ~       RI  13.567  0.619   0.364    0.347    0.347
## 57       RI =~     Im22  13.510 -0.319  -0.188   -0.123   -0.123
## 58     PROF  ~      SAT  13.460  1.351   1.229    1.229    1.229
## 59    BRAND  ~       RI  13.269 -2.130  -1.040   -1.040   -1.040
## 60     FOOD =~     Im11  12.957  0.218   0.180    0.156    0.156
## 61   COM_A3 ~~   C_REP1  12.934  0.079   0.079    0.197    0.197
## 62    AFCOM =~   C_REP3  12.654 -0.069  -0.077   -0.138   -0.138
## 63   CHOICE =~     Im13  12.494  0.128   0.167    0.138    0.138
## 64      Im9  ~    ATMOS  12.301  0.151   0.190    0.139    0.139
## 65 PRODQUAL  ~      COI  12.163 -1.204  -2.843   -2.843   -2.843
## 66      SAT =~   COM_A3  12.153  0.218   0.184    0.116    0.116
## 67     Im21 ~~   C_REP3  11.927  0.055   0.055    0.181    0.181
## 68    AFCOM =~     Im11  11.658  0.139   0.155    0.135    0.135
## 69      SAT =~    C_CR4  11.299  0.268   0.227    0.113    0.113
## 70     Im11 ~~     Im12  11.197  0.133   0.133    0.265    0.265
## 71    BRAND  ~      Im9  11.157  0.099   0.082    0.112    0.082
## 72      Im9  ~    AFCOM  11.029  0.300   0.335    0.246    0.246
## 73    AFCOM =~    SAT_2  10.908  0.102   0.114    0.115    0.115
## 74   C_REP1 ~~   C_REP2  10.704 -0.074  -0.074   -0.777   -0.777
## 75      Im8  ~     DECO  10.609  0.108   0.134    0.128    0.128
## 76     Im13 ~~      Im1  10.426  0.068   0.068    0.379    0.379
## 77    ATMOS =~     Im12  10.359 -0.114  -0.143   -0.127   -0.127
## 78      Im8  ~      COI  10.225 -0.341  -0.573   -0.546   -0.546
## 79   CHOICE =~   C_REP1  10.161  0.056   0.073    0.100    0.100
## 80 PRODQUAL  ~     Im15  10.071  0.071   0.099    0.118    0.099

Discussion

This model is not great, it fails the global fit measures.

The highest modification indices are all relating to Im8 and Im15. In order improve the model we do a second round and exclude them.

ROUND 2

Model

# excluded out Im8 and Im15
model_SEM <- "
DECO =~ Im3 + Im4 + Im5
FOOD =~ Im10 + Im14
ATMOS =~ Im20 + Im21 + Im22
PRODQUAL =~ Im11 + Im12 + Im13
CHOICE =~ Im1 + Im2
PROF =~ Im16 + Im19
BRAND =~ Im17 + Im18
FRENCH =~ Im6 + Im7

AFCOM =~ COM_A1 + COM_A2 + COM_A3 + COM_A4
SAT =~ SAT_1 + SAT_2 + SAT_3
RI =~ C_REP1 + C_REP2 + C_REP3
COI =~ C_CR1 + C_CR3 + C_CR4

SAT ~ s1*DECO + s2*FOOD + s3*ATMOS + s4*PRODQUAL + s5*CHOICE + s6*PROF + s7*BRAND + s8*FRENCH + si9*Im9
AFCOM ~ a1*DECO + a2*FOOD + a3*ATMOS + a4*PRODQUAL + a5*CHOICE + a6*PROF + a7*BRAND + a8*FRENCH + ai9*Im9

RI ~ rs*SAT + ra*AFCOM + r01*DECO + r02*FOOD + r03*ATMOS + r04*PRODQUAL + r05*CHOICE + r06*PROF + r07*BRAND + r08*FRENCH + r0i9*Im9
COI ~ cs*SAT + ca*AFCOM + c01*DECO + c02*FOOD + c03*ATMOS + c04*PRODQUAL + c05*CHOICE + c06*PROF + c07*BRAND + c08*FRENCH + c0i9*Im9

rss1:= rs*s1
raa1:= ra*a1
css1:= cs*s1
caa1:= ca*a1
DECOtoRI_total:= r01 + rss1 + raa1
DECOtoCOI_total:= c01 + css1 + caa1

rss2:= rs*s2
raa2:= ra*a2
css2:= cs*s2
caa2:= ca*a2
FOODtoRI_total:= r02 + rss2 + raa2
FOODtoCOI_total:= c02 + css2 + caa2

rss3:= rs*s3
raa3:= ra*a3
css3:= cs*s3
caa3:= ca*a3
ATMOStoRI_total:= r03 + rss3 + raa3
ATMOStoCOI_total:= c03 + css3 + caa3

rss4:= rs*s4
raa4:= ra*a4
css4:= cs*s4
caa4:= ca*a4
PQUALtoRI_total:= r04 + rss4 + raa4
PQUALtoCOI_total:= c04 + css4 + caa4

rss5:= rs*s5
raa5:= ra*a5
css5:= cs*s5
caa5:= ca*a5
CHOICEtoRI_total:= r05 + rss5 + raa5
CHOICEtoCOI_total:= c05 + css5 + caa5

rss6:= rs*s6
raa6:= ra*a6
css6:= cs*s6
caa6:= ca*a6
PROFtoRI_total:= r06 + rss6 + raa6
PROFtoCOI_total:= c06 + css6 + caa6

rss7:= rs*s7
raa7:= ra*a7
css7:= cs*s7
caa7:= ca*a7
BRANDtoRI_total:= r07 + rss7 + raa7
BRANDtoCOI_total:= c07 + css7 + caa7

rss8:= rs*s8
raa8:= ra*a8
css8:= cs*s8
caa8:= ca*a8
FRENCHtoRI_total:= r08 + rss8 + raa8
FRENCHtoCOI_total:= c08 + css8 + caa8

rssi9:= rs*si9
raai9:= ra*ai9
cssi9:= cs*si9
caai9:= ca*ai9
Im9toRI_total:= r0i9 + rssi9 + raai9
Im9toCOI_total:= c0i9 + cssi9 + caai9
"

Fit

fit_SEM <- cfa(model_SEM, data=survey, missing="ML")

SEM plot

semPaths(fit_SEM, what = "col", whatLabels = "par", style = "ram",
         rotation = 2, layout = "tree3",
         mar = c(1, 2, 1, 2), #margins
         nCharNodes = 7,
         shapeMan = "rectangle", # variable shape
         sizeMan = 4, # variable shape size
         sizeMan2 = 3, # variable shape vertical stretch
         # structural = T, # don't plot image variables (manifests)
         sizeInt = 1, # intercept size
         intercepts = F, # don't include intercepts
         sizeLat = 5, #factor size
         asize = 2, # arrow size
         curvePivot=T, # edge broken curve
         edge.label.cex = .5, # edge label size
         # edge.color = "skyblue4",
         # levels= c(1,2,7,8,9,10),
         groups = "latents",
         cut = .5 #cutoff for edges,
         )

Let us now assess this model

Global fit measures

global_fit_measures <- f_global_fit_measures(fit_SEM)
# check global fit pass/fail of global fit measures
global_fit_measures[[1]]
Value Result
pvalue 0.000 FAIL
chisq 1018.281
cfi 0.949 High under-rejection rate
rmsea 0.051 Acceptable fit

Regression results and full summary

# output full summary
global_fit_measures[[2]]
## lavaan 0.6.15 ended normally after 156 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                       165
## 
##                                                   Used       Total
##   Number of observations                           537         553
##   Number of missing patterns                       124            
## 
## Model Test User Model:
##                                                       
##   Test statistic                              1018.281
##   Degrees of freedom                               427
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                             12060.146
##   Degrees of freedom                               528
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.949
##   Tucker-Lewis Index (TLI)                       0.937
##                                                       
##   Robust Comparative Fit Index (CFI)             0.950
##   Robust Tucker-Lewis Index (TLI)                0.938
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -21744.301
##   Loglikelihood unrestricted model (H1)     -21235.160
##                                                       
##   Akaike (AIC)                               43818.601
##   Bayesian (BIC)                             44525.791
##   Sample-size adjusted Bayesian (SABIC)      44002.025
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.051
##   90 Percent confidence interval - lower         0.047
##   90 Percent confidence interval - upper         0.055
##   P-value H_0: RMSEA <= 0.050                    0.368
##   P-value H_0: RMSEA >= 0.080                    0.000
##                                                       
##   Robust RMSEA                                   0.051
##   90 Percent confidence interval - lower         0.047
##   90 Percent confidence interval - upper         0.055
##   P-value H_0: Robust RMSEA <= 0.050             0.298
##   P-value H_0: Robust RMSEA >= 0.080             0.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.082
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   DECO =~                                                               
##     Im3               1.000                               1.239    0.936
##     Im4               1.059    0.025   42.134    0.000    1.312    0.970
##     Im5               0.817    0.035   23.460    0.000    1.012    0.759
##   FOOD =~                                                               
##     Im10              1.000                               0.817    0.923
##     Im14              1.015    0.036   28.306    0.000    0.829    0.953
##   ATMOS =~                                                              
##     Im20              1.000                               1.259    0.845
##     Im21              0.857    0.041   20.756    0.000    1.079    0.788
##     Im22              1.067    0.046   23.084    0.000    1.344    0.879
##   PRODQUAL =~                                                           
##     Im11              1.000                               0.713    0.621
##     Im12              1.395    0.092   15.196    0.000    0.995    0.875
##     Im13              1.453    0.103   14.166    0.000    1.036    0.858
##   CHOICE =~                                                             
##     Im1               1.000                               1.299    0.976
##     Im2               0.890    0.032   27.726    0.000    1.156    0.901
##   PROF =~                                                               
##     Im16              1.000                               0.926    0.768
##     Im19              1.042    0.059   17.765    0.000    0.965    0.852
##   BRAND =~                                                              
##     Im17              1.000                               1.211    0.968
##     Im18              0.995    0.041   24.017    0.000    1.205    0.859
##   FRENCH =~                                                             
##     Im6               1.000                               0.979    0.817
##     Im7               1.182    0.069   17.234    0.000    1.157    0.953
##   AFCOM =~                                                              
##     COM_A1            1.000                               1.131    0.794
##     COM_A2            1.179    0.056   21.206    0.000    1.334    0.833
##     COM_A3            1.171    0.059   19.798    0.000    1.325    0.818
##     COM_A4            1.292    0.063   20.536    0.000    1.462    0.843
##   SAT =~                                                                
##     SAT_1             1.000                               0.877    0.862
##     SAT_2             0.940    0.050   18.636    0.000    0.824    0.819
##     SAT_3             0.823    0.055   14.913    0.000    0.721    0.636
##   RI =~                                                                 
##     C_REP1            1.000                               0.607    0.816
##     C_REP2            0.973    0.044   21.976    0.000    0.591    0.937
##     C_REP3            0.707    0.038   18.802    0.000    0.429    0.767
##   COI =~                                                                
##     C_CR1             1.000                               1.672    0.850
##     C_CR3             1.035    0.051   20.157    0.000    1.730    0.831
##     C_CR4             0.960    0.049   19.554    0.000    1.604    0.806
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   SAT ~                                                                 
##     DECO      (s1)   -0.099    0.044   -2.260    0.024   -0.139   -0.139
##     FOOD      (s2)    0.084    0.065    1.290    0.197    0.078    0.078
##     ATMOS     (s3)    0.046    0.038    1.194    0.232    0.066    0.066
##     PRODQUA   (s4)   -0.035    0.076   -0.454    0.650   -0.028   -0.028
##     CHOICE    (s5)    0.126    0.040    3.148    0.002    0.186    0.186
##     PROF      (s6)    0.451    0.088    5.106    0.000    0.476    0.476
##     BRAND     (s7)    0.014    0.045    0.317    0.751    0.020    0.020
##     FRENCH    (s8)    0.095    0.053    1.795    0.073    0.107    0.107
##     Im9      (si9)    0.003    0.033    0.104    0.917    0.004    0.005
##   AFCOM ~                                                               
##     DECO      (a1)   -0.027    0.055   -0.487    0.626   -0.030   -0.030
##     FOOD      (a2)    0.038    0.084    0.449    0.653    0.027    0.027
##     ATMOS     (a3)    0.366    0.052    7.026    0.000    0.408    0.408
##     PRODQUA   (a4)   -0.203    0.101   -2.015    0.044   -0.128   -0.128
##     CHOICE    (a5)    0.098    0.051    1.927    0.054    0.112    0.112
##     PROF      (a6)    0.167    0.107    1.561    0.118    0.136    0.136
##     BRAND     (a7)   -0.013    0.059   -0.228    0.819   -0.014   -0.014
##     FRENCH    (a8)    0.197    0.069    2.836    0.005    0.170    0.170
##     Im9      (ai9)    0.023    0.043    0.528    0.598    0.020    0.027
##   RI ~                                                                  
##     SAT       (rs)    0.199    0.045    4.417    0.000    0.287    0.287
##     AFCOM     (ra)    0.186    0.030    6.169    0.000    0.347    0.347
##     DECO     (r01)    0.014    0.029    0.474    0.636    0.028    0.028
##     FOOD     (r02)    0.039    0.043    0.897    0.370    0.052    0.052
##     ATMOS    (r03)    0.039    0.028    1.375    0.169    0.081    0.081
##     PRODQUA  (r04)    0.109    0.052    2.100    0.036    0.128    0.128
##     CHOICE   (r05)   -0.020    0.026   -0.781    0.435   -0.043   -0.043
##     PROF     (r06)   -0.028    0.060   -0.471    0.638   -0.043   -0.043
##     BRAND    (r07)   -0.002    0.030   -0.051    0.959   -0.003   -0.003
##     FRENCH   (r08)   -0.013    0.036   -0.368    0.713   -0.021   -0.021
##     Im9     (r0i9)   -0.043    0.022   -1.954    0.051   -0.071   -0.096
##   COI ~                                                                 
##     SAT       (cs)   -0.372    0.134   -2.781    0.005   -0.195   -0.195
##     AFCOM     (ca)    0.564    0.092    6.102    0.000    0.382    0.382
##     DECO     (c01)   -0.002    0.092   -0.019    0.985   -0.001   -0.001
##     FOOD     (c02)   -0.073    0.136   -0.542    0.588   -0.036   -0.036
##     ATMOS    (c03)    0.139    0.089    1.567    0.117    0.105    0.105
##     PRODQUA  (c04)    0.225    0.163    1.379    0.168    0.096    0.096
##     CHOICE   (c05)   -0.006    0.082   -0.079    0.937   -0.005   -0.005
##     PROF     (c06)   -0.211    0.188   -1.126    0.260   -0.117   -0.117
##     BRAND    (c07)    0.031    0.094    0.332    0.740    0.023    0.023
##     FRENCH   (c08)   -0.116    0.113   -1.029    0.304   -0.068   -0.068
##     Im9     (c0i9)   -0.013    0.070   -0.188    0.851   -0.008   -0.011
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   DECO ~~                                                               
##     FOOD              0.420    0.051    8.249    0.000    0.415    0.415
##     ATMOS             0.733    0.083    8.833    0.000    0.470    0.470
##     PRODQUAL          0.409    0.052    7.888    0.000    0.463    0.463
##     CHOICE            0.717    0.080    8.962    0.000    0.445    0.445
##     PROF              0.758    0.072   10.475    0.000    0.660    0.660
##     BRAND             0.778    0.078   10.013    0.000    0.519    0.519
##     FRENCH            0.417    0.064    6.493    0.000    0.344    0.344
##   FOOD ~~                                                               
##     ATMOS             0.300    0.052    5.820    0.000    0.292    0.292
##     PRODQUAL          0.265    0.035    7.640    0.000    0.456    0.456
##     CHOICE            0.320    0.051    6.325    0.000    0.302    0.302
##     PROF              0.376    0.044    8.496    0.000    0.497    0.497
##     BRAND             0.321    0.048    6.699    0.000    0.325    0.325
##     FRENCH            0.468    0.048    9.849    0.000    0.586    0.586
##   ATMOS ~~                                                              
##     PRODQUAL          0.376    0.054    7.007    0.000    0.419    0.419
##     CHOICE            0.724    0.085    8.519    0.000    0.443    0.443
##     PROF              0.551    0.069    7.979    0.000    0.472    0.472
##     BRAND             0.782    0.082    9.546    0.000    0.513    0.513
##     FRENCH            0.416    0.065    6.377    0.000    0.338    0.338
##   PRODQUAL ~~                                                           
##     CHOICE            0.448    0.055    8.167    0.000    0.484    0.484
##     PROF              0.352    0.044    7.949    0.000    0.534    0.534
##     BRAND             0.489    0.054    8.997    0.000    0.567    0.567
##     FRENCH            0.219    0.038    5.691    0.000    0.313    0.313
##   CHOICE ~~                                                             
##     PROF              0.726    0.073    9.963    0.000    0.604    0.604
##     BRAND             0.817    0.080   10.194    0.000    0.520    0.520
##     FRENCH            0.283    0.061    4.625    0.000    0.222    0.222
##   PROF ~~                                                               
##     BRAND             0.678    0.068   10.016    0.000    0.604    0.604
##     FRENCH            0.338    0.052    6.522    0.000    0.373    0.373
##   BRAND ~~                                                              
##     FRENCH            0.388    0.062    6.217    0.000    0.327    0.327
##  .RI ~~                                                                 
##    .COI              -0.024    0.039   -0.612    0.541   -0.032   -0.032
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Im3               4.991    0.057   86.922    0.000    4.991    3.771
##    .Im4               4.997    0.059   85.280    0.000    4.997    3.693
##    .Im5               5.040    0.058   86.460    0.000    5.040    3.777
##    .Im10              6.099    0.038  159.489    0.000    6.099    6.897
##    .Im14              6.138    0.038  162.709    0.000    6.138    7.058
##    .Im20              4.698    0.065   72.813    0.000    4.698    3.154
##    .Im21              5.156    0.059   87.040    0.000    5.156    3.766
##    .Im22              4.299    0.066   64.745    0.000    4.299    2.812
##    .Im11              5.654    0.050  113.399    0.000    5.654    4.927
##    .Im12              5.663    0.049  114.673    0.000    5.663    4.985
##    .Im13              5.445    0.052  103.901    0.000    5.445    4.508
##    .Im1               4.802    0.058   83.325    0.000    4.802    3.609
##    .Im2               4.868    0.056   87.545    0.000    4.868    3.794
##    .Im16              5.148    0.053   97.768    0.000    5.148    4.267
##    .Im19              5.149    0.049  104.764    0.000    5.149    4.546
##    .Im17              5.029    0.054   92.712    0.000    5.029    4.018
##    .Im18              4.593    0.061   75.157    0.000    4.593    3.275
##    .Im6               5.826    0.052  112.320    0.000    5.826    4.863
##    .Im7               5.757    0.053  109.007    0.000    5.757    4.743
##    .COM_A1            4.187    0.225   18.588    0.000    4.187    2.938
##    .COM_A2            3.767    0.265   14.226    0.000    3.767    2.353
##    .COM_A3            3.417    0.263   12.980    0.000    3.417    2.110
##    .COM_A4            3.322    0.290   11.463    0.000    3.322    1.915
##    .SAT_1             5.333    0.172   31.059    0.000    5.333    5.243
##    .SAT_2             5.473    0.162   33.790    0.000    5.473    5.439
##    .SAT_3             5.455    0.145   37.503    0.000    5.455    4.811
##    .C_REP1            4.477    0.124   36.050    0.000    4.477    6.020
##    .C_REP2            4.701    0.120   39.263    0.000    4.701    7.452
##    .C_REP3            4.815    0.088   54.644    0.000    4.815    8.605
##    .C_CR1             2.705    0.380    7.120    0.000    2.705    1.376
##    .C_CR3             3.285    0.394    8.345    0.000    3.285    1.578
##    .C_CR4             2.806    0.366    7.674    0.000    2.806    1.410
##     DECO              0.000                               0.000    0.000
##     FOOD              0.000                               0.000    0.000
##     ATMOS             0.000                               0.000    0.000
##     PRODQUAL          0.000                               0.000    0.000
##     CHOICE            0.000                               0.000    0.000
##     PROF              0.000                               0.000    0.000
##     BRAND             0.000                               0.000    0.000
##     FRENCH            0.000                               0.000    0.000
##    .AFCOM             0.000                               0.000    0.000
##    .SAT               0.000                               0.000    0.000
##    .RI                0.000                               0.000    0.000
##    .COI               0.000                               0.000    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Im3               0.217    0.025    8.701    0.000    0.217    0.124
##    .Im4               0.109    0.025    4.420    0.000    0.109    0.060
##    .Im5               0.756    0.050   15.054    0.000    0.756    0.425
##    .Im10              0.115    0.019    5.928    0.000    0.115    0.147
##    .Im14              0.069    0.019    3.623    0.000    0.069    0.092
##    .Im20              0.634    0.059   10.726    0.000    0.634    0.286
##    .Im21              0.711    0.057   12.554    0.000    0.711    0.379
##    .Im22              0.533    0.061    8.716    0.000    0.533    0.228
##    .Im11              0.808    0.055   14.629    0.000    0.808    0.614
##    .Im12              0.301    0.039    7.819    0.000    0.301    0.234
##    .Im13              0.385    0.044    8.756    0.000    0.385    0.264
##    .Im1               0.084    0.048    1.763    0.078    0.084    0.047
##    .Im2               0.309    0.042    7.350    0.000    0.309    0.188
##    .Im16              0.598    0.051   11.728    0.000    0.598    0.411
##    .Im19              0.351    0.044    7.935    0.000    0.351    0.274
##    .Im17              0.099    0.046    2.157    0.031    0.099    0.063
##    .Im18              0.516    0.055    9.318    0.000    0.516    0.262
##    .Im6               0.478    0.054    8.776    0.000    0.478    0.333
##    .Im7               0.136    0.064    2.111    0.035    0.136    0.092
##    .COM_A1            0.752    0.059   12.777    0.000    0.752    0.370
##    .COM_A2            0.783    0.067   11.742    0.000    0.783    0.306
##    .COM_A3            0.867    0.071   12.251    0.000    0.867    0.331
##    .COM_A4            0.871    0.076   11.475    0.000    0.871    0.290
##    .SAT_1             0.266    0.034    7.796    0.000    0.266    0.257
##    .SAT_2             0.333    0.034    9.818    0.000    0.333    0.329
##    .SAT_3             0.765    0.055   14.005    0.000    0.765    0.595
##    .C_REP1            0.184    0.016   11.311    0.000    0.184    0.333
##    .C_REP2            0.049    0.010    4.688    0.000    0.049    0.122
##    .C_REP3            0.129    0.009   13.854    0.000    0.129    0.412
##    .C_CR1             1.071    0.115    9.289    0.000    1.071    0.277
##    .C_CR3             1.339    0.131   10.233    0.000    1.339    0.309
##    .C_CR4             1.388    0.124   11.178    0.000    1.388    0.350
##     DECO              1.535    0.109   14.100    0.000    1.000    1.000
##     FOOD              0.667    0.051   13.159    0.000    1.000    1.000
##     ATMOS             1.585    0.137   11.544    0.000    1.000    1.000
##     PRODQUAL          0.508    0.069    7.407    0.000    1.000    1.000
##     CHOICE            1.686    0.118   14.251    0.000    1.000    1.000
##     PROF              0.857    0.089    9.655    0.000    1.000    1.000
##     BRAND             1.467    0.106   13.805    0.000    1.000    1.000
##     FRENCH            0.958    0.095   10.111    0.000    1.000    1.000
##    .AFCOM             0.864    0.087    9.908    0.000    0.676    0.676
##    .SAT               0.448    0.048    9.361    0.000    0.583    0.583
##    .RI                0.235    0.022   10.718    0.000    0.637    0.637
##    .COI               2.301    0.214   10.764    0.000    0.823    0.823
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     rss1             -0.020    0.010   -2.003    0.045   -0.040   -0.040
##     raa1             -0.005    0.010   -0.486    0.627   -0.010   -0.010
##     css1              0.037    0.021    1.767    0.077    0.027    0.027
##     caa1             -0.015    0.031   -0.485    0.628   -0.011   -0.011
##     DECOtoRI_total   -0.011    0.031   -0.351    0.726   -0.022   -0.022
##     DECOtoCOI_totl    0.020    0.094    0.209    0.834    0.015    0.015
##     rss2              0.017    0.013    1.241    0.215    0.022    0.022
##     raa2              0.007    0.016    0.448    0.654    0.009    0.009
##     css2             -0.031    0.027   -1.166    0.244   -0.015   -0.015
##     caa2              0.021    0.048    0.449    0.654    0.010    0.010
##     FOODtoRI_total    0.062    0.047    1.340    0.180    0.084    0.084
##     FOODtoCOI_totl   -0.083    0.142   -0.587    0.557   -0.041   -0.041
##     rss3              0.009    0.008    1.158    0.247    0.019    0.019
##     raa3              0.068    0.014    4.748    0.000    0.142    0.142
##     css3             -0.017    0.016   -1.090    0.276   -0.013   -0.013
##     caa3              0.207    0.044    4.742    0.000    0.156    0.156
##     ATMOStoRI_totl    0.116    0.028    4.105    0.000    0.241    0.241
##     ATMOStoCOI_ttl    0.329    0.085    3.845    0.000    0.247    0.247
##     rss4             -0.007    0.015   -0.451    0.652   -0.008   -0.008
##     raa4             -0.038    0.020   -1.908    0.056   -0.044   -0.044
##     css4              0.013    0.029    0.449    0.653    0.006    0.006
##     caa4             -0.114    0.060   -1.908    0.056   -0.049   -0.049
##     PQUALtoRI_totl    0.064    0.055    1.170    0.242    0.076    0.076
##     PQUALtoCOI_ttl    0.123    0.169    0.731    0.464    0.053    0.053
##     rss5              0.025    0.010    2.624    0.009    0.054    0.054
##     raa5              0.018    0.010    1.843    0.065    0.039    0.039
##     css5             -0.047    0.023   -2.075    0.038   -0.036   -0.036
##     caa5              0.055    0.030    1.852    0.064    0.043    0.043
##     CHOICEtoRI_ttl    0.023    0.028    0.834    0.404    0.049    0.049
##     CHOICEtCOI_ttl    0.002    0.085    0.021    0.983    0.001    0.001
##     rss6              0.090    0.027    3.307    0.001    0.137    0.137
##     raa6              0.031    0.021    1.515    0.130    0.047    0.047
##     css6             -0.168    0.068   -2.484    0.013   -0.093   -0.093
##     caa6              0.094    0.063    1.501    0.133    0.052    0.052
##     PROFtoRI_total    0.092    0.059    1.573    0.116    0.141    0.141
##     PROFtoCOI_totl   -0.285    0.177   -1.615    0.106   -0.158   -0.158
##     rss7              0.003    0.009    0.316    0.752    0.006    0.006
##     raa7             -0.002    0.011   -0.228    0.819   -0.005   -0.005
##     css7             -0.005    0.017   -0.315    0.753   -0.004   -0.004
##     caa7             -0.008    0.033   -0.228    0.820   -0.005   -0.005
##     BRANDtoRI_totl   -0.001    0.032   -0.036    0.971   -0.002   -0.002
##     BRANDtoCOI_ttl    0.018    0.099    0.186    0.853    0.013    0.013
##     rss8              0.019    0.011    1.674    0.094    0.031    0.031
##     raa8              0.037    0.014    2.591    0.010    0.059    0.059
##     css8             -0.036    0.023   -1.516    0.130   -0.021   -0.021
##     caa8              0.111    0.043    2.581    0.010    0.065    0.065
##     FRENCHtoRI_ttl    0.043    0.038    1.117    0.264    0.069    0.069
##     FRENCHtCOI_ttl   -0.041    0.116   -0.349    0.727   -0.024   -0.024
##     rssi9             0.001    0.007    0.104    0.917    0.001    0.002
##     raai9             0.004    0.008    0.526    0.599    0.007    0.009
##     cssi9            -0.001    0.012   -0.104    0.918   -0.001   -0.001
##     caai9             0.013    0.024    0.526    0.599    0.008    0.010
##     Im9toRI_total    -0.038    0.024   -1.620    0.105   -0.063   -0.085
##     Im9toCOI_total   -0.002    0.073   -0.023    0.982   -0.001   -0.001

local fit measures

lambda = inspect(fit_SEM, what="std")$lambda
theta = inspect(fit_SEM, what="std")$theta
psi = inspect(fit_SEM, what="std")$psi

Indicator reliability criterion (Individual Item Reliability)

# calculate indicator reliabilities (should be larger than 0.4)
indic_rel <- f_indic_rel(lambda, theta)
# pass/fail
indic_rel[[1]]
Result
Individual Item Reliability Fail
# details
indic_rel[[2]]
##         DECO  FOOD ATMOS PRODQU CHOICE  PROF BRAND FRENCH AFCOM   SAT    RI
## Im3    0.876   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im4    0.940   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im5    0.575   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im10     NaN 0.853   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im14     NaN 0.908   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im20     NaN   NaN 0.714    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im21     NaN   NaN 0.621    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im22     NaN   NaN 0.772    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im11     NaN   NaN   NaN  0.386    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im12     NaN   NaN   NaN  0.766    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im13     NaN   NaN   NaN  0.736    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im1      NaN   NaN   NaN    NaN  0.953   NaN   NaN    NaN   NaN   NaN   NaN
## Im2      NaN   NaN   NaN    NaN  0.812   NaN   NaN    NaN   NaN   NaN   NaN
## Im16     NaN   NaN   NaN    NaN    NaN 0.589   NaN    NaN   NaN   NaN   NaN
## Im19     NaN   NaN   NaN    NaN    NaN 0.726   NaN    NaN   NaN   NaN   NaN
## Im17     NaN   NaN   NaN    NaN    NaN   NaN 0.937    NaN   NaN   NaN   NaN
## Im18     NaN   NaN   NaN    NaN    NaN   NaN 0.738    NaN   NaN   NaN   NaN
## Im6      NaN   NaN   NaN    NaN    NaN   NaN   NaN  0.667   NaN   NaN   NaN
## Im7      NaN   NaN   NaN    NaN    NaN   NaN   NaN  0.908   NaN   NaN   NaN
## COM_A1   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.630   NaN   NaN
## COM_A2   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.694   NaN   NaN
## COM_A3   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.669   NaN   NaN
## COM_A4   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.710   NaN   NaN
## SAT_1    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN 0.743   NaN
## SAT_2    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN 0.671   NaN
## SAT_3    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN 0.405   NaN
## C_REP1   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN 0.667
## C_REP2   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN 0.878
## C_REP3   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN 0.588
## C_CR1    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## C_CR3    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## C_CR4    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im9      NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
##          COI Im9
## Im3      NaN NaN
## Im4      NaN NaN
## Im5      NaN NaN
## Im10     NaN NaN
## Im14     NaN NaN
## Im20     NaN NaN
## Im21     NaN NaN
## Im22     NaN NaN
## Im11     NaN NaN
## Im12     NaN NaN
## Im13     NaN NaN
## Im1      NaN NaN
## Im2      NaN NaN
## Im16     NaN NaN
## Im19     NaN NaN
## Im17     NaN NaN
## Im18     NaN NaN
## Im6      NaN NaN
## Im7      NaN NaN
## COM_A1   NaN NaN
## COM_A2   NaN NaN
## COM_A3   NaN NaN
## COM_A4   NaN NaN
## SAT_1    NaN NaN
## SAT_2    NaN NaN
## SAT_3    NaN NaN
## C_REP1   NaN NaN
## C_REP2   NaN NaN
## C_REP3   NaN NaN
## C_CR1  0.723 NaN
## C_CR3  0.691 NaN
## C_CR4  0.650 NaN
## Im9      NaN   1

Construct reliability criterion

# calculate construct reliability (should be above .6)
construct_rel <- f_construct_rel(lambda,theta)
# pass/fail
construct_rel[[1]]
Result
Construct Reliability Pass
# details
construct_rel[[2]]
##               DECO      FOOD     ATMOS  PRODQUAL    CHOICE      PROF     BRAND
## DECO     0.9211495       NaN       NaN       NaN       NaN       NaN       NaN
## FOOD           NaN 0.9363902       NaN       NaN       NaN       NaN       NaN
## ATMOS          NaN       NaN 0.8760786       NaN       NaN       NaN       NaN
## PRODQUAL       NaN       NaN       NaN 0.8330218       NaN       NaN       NaN
## CHOICE         NaN       NaN       NaN       NaN 0.9374431       NaN       NaN
## PROF           NaN       NaN       NaN       NaN       NaN 0.7929737       NaN
## BRAND          NaN       NaN       NaN       NaN       NaN       NaN 0.9111648
## FRENCH         NaN       NaN       NaN       NaN       NaN       NaN       NaN
## AFCOM          NaN       NaN       NaN       NaN       NaN       NaN       NaN
## SAT            NaN       NaN       NaN       NaN       NaN       NaN       NaN
## RI             NaN       NaN       NaN       NaN       NaN       NaN       NaN
## COI            NaN       NaN       NaN       NaN       NaN       NaN       NaN
## Im9            NaN       NaN       NaN       NaN       NaN       NaN       NaN
##            FRENCH     AFCOM      SAT        RI       COI Im9
## DECO          NaN       NaN      NaN       NaN       NaN NaN
## FOOD          NaN       NaN      NaN       NaN       NaN NaN
## ATMOS         NaN       NaN      NaN       NaN       NaN NaN
## PRODQUAL      NaN       NaN      NaN       NaN       NaN NaN
## CHOICE        NaN       NaN      NaN       NaN       NaN NaN
## PROF          NaN       NaN      NaN       NaN       NaN NaN
## BRAND         NaN       NaN      NaN       NaN       NaN NaN
## FRENCH   0.880507       NaN      NaN       NaN       NaN NaN
## AFCOM         NaN 0.8929799      NaN       NaN       NaN NaN
## SAT           NaN       NaN 0.819632       NaN       NaN NaN
## RI            NaN       NaN      NaN 0.8797294       NaN NaN
## COI           NaN       NaN      NaN       NaN 0.8685042 NaN
## Im9           NaN       NaN      NaN       NaN       NaN   1

Average Variance Extracted criterion

# calculate Average Variance Extracted (should be above .5)
AVE <- f_AVE(lambda,theta)
# pass/fail
AVE[[1]]
Result
Average Variance Extracted Pass
# details
diag(AVE[[2]])
##      DECO      FOOD     ATMOS  PRODQUAL    CHOICE      PROF     BRAND    FRENCH 
## 0.7974248 0.8804152 0.7024908 0.6295153 0.8824164 0.6575775 0.8373090 0.7875128 
##     AFCOM       SAT        RI       COI       Im9 
## 0.6760688 0.6061532 0.7106341 0.6877590 1.0000000

Construct correlations

# correlations between constructs (factors...) should be lower than .7
construct_cor <- f_construct_corr(psi)
# pass / fail
construct_cor[[1]]
Result
Construct Correlations Pass
# details
construct_cor[[2]]
##            DECO   FOOD  ATMOS PRODQU CHOICE   PROF  BRAND FRENCH  AFCOM    SAT
## DECO      1.000                                                               
## FOOD      0.415  1.000                                                        
## ATMOS     0.470  0.292  1.000                                                 
## PRODQUAL  0.463  0.456  0.419  1.000                                          
## CHOICE    0.445  0.302  0.443  0.484  1.000                                   
## PROF      0.660  0.497  0.472  0.534  0.604  1.000                            
## BRAND     0.519  0.325  0.513  0.567  0.520  0.604  1.000                     
## FRENCH    0.344  0.586  0.338  0.313  0.222  0.373  0.327  1.000              
## AFCOM     0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.676       
## SAT       0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.583
## RI        0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000
## COI       0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000
## Im9       0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000
##              RI    COI    Im9
## DECO                         
## FOOD                         
## ATMOS                        
## PRODQUAL                     
## CHOICE                       
## PROF                         
## BRAND                        
## FRENCH                       
## AFCOM                        
## SAT                          
## RI        0.637              
## COI      -0.032  0.823       
## Im9       0.000  0.000  1.000

Fornell-Larcker Criteria

# AVE should be higher than squared correlations between constructs
fornell_larcker <- f_fornell_larcker(psi,AVE[[2]])
# pass / fail
fornell_larcker[[1]]
Result
Fornell-Larcker Criteria Pass
# details (note: AVE is in the diagonals)
fornell_larcker[[2]]
##           DECO  FOOD ATMOS PRODQU CHOICE  PROF BRAND FRENCH AFCOM   SAT    RI
## DECO     0.797                                                               
## FOOD     0.173 0.880                                                         
## ATMOS    0.221 0.085 0.702                                                   
## PRODQUAL 0.214 0.208 0.176  0.630                                            
## CHOICE   0.198 0.091 0.196  0.234  0.882                                     
## PROF     0.436 0.247 0.223  0.285  0.365 0.658                               
## BRAND    0.269 0.106 0.263  0.321  0.270 0.365 0.837                         
## FRENCH   0.118 0.344 0.114  0.098  0.049 0.139 0.107  0.788                  
## AFCOM    0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.676            
## SAT      0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.606      
## RI       0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.000 0.711
## COI      0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.000 0.001
## Im9      0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.000 0.000
##            COI   Im9
## DECO                
## FOOD                
## ATMOS               
## PRODQUAL            
## CHOICE              
## PROF                
## BRAND               
## FRENCH              
## AFCOM               
## SAT                 
## RI                  
## COI      0.688      
## Im9      0.000 1.000

Modification indices

arrange(modificationindices(fit_SEM),-mi) |> filter(mi>10)
##         lhs op      rhs      mi      epc  sepc.lv sepc.all sepc.nox
## 1       Im9  ~   FRENCH 155.550    0.777    0.761    0.562    0.562
## 2       Im9  ~       RI 151.552    2.559    1.554    1.149    1.149
## 3       Im9  ~ PRODQUAL 124.611    0.976    0.696    0.515    0.515
## 4       Im9  ~      SAT 122.499    1.200    1.052    0.778    0.778
## 5       Im9  ~    AFCOM 111.438    1.000    1.132    0.837    0.837
## 6       Im9  ~    BRAND 111.082    0.523    0.634    0.469    0.469
## 7       Im9  ~     FOOD 100.053    0.738    0.603    0.446    0.446
## 8       Im9  ~     PROF  91.639    0.656    0.608    0.449    0.449
## 9       Im9  ~    ATMOS  69.669    0.411    0.517    0.383    0.383
## 10      Im9  ~     DECO  67.885    0.397    0.492    0.364    0.364
## 11    AFCOM =~   C_REP1  60.470    0.185    0.210    0.282    0.282
## 12   C_REP2 ~~   C_REP3  49.725    0.097    0.097    1.219    1.219
## 13   FRENCH  ~      SAT  48.923   55.264   49.510   49.510   49.510
## 14      Im9  ~   CHOICE  48.906    0.321    0.417    0.309    0.309
## 15   FRENCH  ~      Im9  48.873    0.187    0.191    0.259    0.191
## 16   FRENCH  ~    AFCOM  48.871    8.308    9.605    9.605    9.605
## 17   FRENCH  ~       RI  48.871   -4.885   -3.031   -3.031   -3.031
## 18   FRENCH  ~      COI  48.776 -113.798 -194.411 -194.411 -194.411
## 19     Im10 ~~     Im14  35.314   67.595   67.595  755.626  755.626
## 20      Im6 ~~      Im7  35.139   13.285   13.285   52.196   52.196
## 21    AFCOM  ~      COI  35.135   -1.264   -1.868   -1.868   -1.868
## 22      SAT  ~       RI  35.132    1.309    0.906    0.906    0.906
## 23      SAT  ~    AFCOM  35.131    0.244    0.315    0.315    0.315
## 24    AFCOM  ~      SAT  35.131    0.471    0.365    0.365    0.365
## 25    AFCOM ~~      SAT  35.131    0.211    0.339    0.339    0.339
## 26      SAT  ~      COI  35.131    0.433    0.825    0.825    0.825
## 27    AFCOM  ~       RI  35.131    2.364    1.269    1.269    1.269
## 28     Im16 ~~     Im19  35.116    2.922    2.922    6.374    6.374
## 29      Im1 ~~      Im2  35.103   15.287   15.287   94.890   94.890
## 30   COM_A1 ~~   COM_A2  27.866    0.268    0.268    0.350    0.350
## 31    ATMOS =~   C_REP1  22.764    0.096    0.121    0.162    0.162
## 32    BRAND =~     Im13  20.077    0.199    0.241    0.199    0.199
## 33     Im11 ~~     Im13  18.598   -0.177   -0.177   -0.316   -0.316
## 34 PRODQUAL  ~      COI  16.973  -48.607 -113.952 -113.952 -113.952
## 35       RI =~    SAT_2  16.370    0.267    0.162    0.161    0.161
## 36 PRODQUAL  ~       RI  16.249   -2.040   -1.737   -1.737   -1.737
## 37 PRODQUAL  ~      Im9  16.248    0.078    0.110    0.148    0.110
## 38 PRODQUAL  ~    AFCOM  16.240    3.468    5.501    5.501    5.501
## 39 PRODQUAL  ~      SAT  16.218   23.039   28.324   28.324   28.324
## 40    AFCOM =~   C_REP2  15.140   -0.079   -0.089   -0.141   -0.141
## 41    BRAND =~     Im12  14.648   -0.162   -0.196   -0.173   -0.173
## 42    AFCOM =~   C_REP3  14.165   -0.072   -0.081   -0.145   -0.145
## 43   C_REP1 ~~   C_REP3  13.943   -0.048   -0.048   -0.310   -0.310
## 44     FOOD =~     Im11  13.433    0.222    0.181    0.158    0.158
## 45   COM_A3 ~~   C_REP1  12.779    0.078    0.078    0.194    0.194
## 46   CHOICE =~     Im20  12.617   -0.140   -0.182   -0.122   -0.122
## 47       RI =~     Im22  12.320   -0.299   -0.182   -0.119   -0.119
## 48     Im11 ~~     Im12  11.991    0.136    0.136    0.275    0.275
## 49     Im21 ~~     Im22  11.850   -0.223   -0.223   -0.363   -0.363
## 50      SAT =~   COM_A3  11.707    0.208    0.182    0.112    0.112
## 51   CHOICE =~     Im13  11.668    0.123    0.160    0.132    0.132
## 52    AFCOM =~     Im11  11.457    0.134    0.152    0.132    0.132
## 53     Im21 ~~   C_REP3  11.324    0.053    0.053    0.175    0.175
## 54   C_REP1 ~~   C_REP2  10.718   -0.070   -0.070   -0.743   -0.743
## 55   CHOICE =~   C_REP1  10.628    0.057    0.075    0.100    0.100
## 56      Im9  ~      COI  10.608    0.536    0.897    0.663    0.663
## 57    BRAND  ~    AFCOM  10.585    4.266    3.984    3.984    3.984
## 58    BRAND  ~      Im9  10.584    0.096    0.079    0.107    0.079
## 59    BRAND  ~       RI  10.584   -2.508   -1.257   -1.257   -1.257
## 60    BRAND  ~      SAT  10.579   28.349   20.518   20.518   20.518
## 61    ATMOS =~     Im12  10.476   -0.111   -0.140   -0.123   -0.123
## 62 PRODQUAL =~    C_CR4  10.300    0.292    0.208    0.105    0.105
## 63     Im13 ~~      Im1  10.185    0.066    0.066    0.367    0.367
## 64    ATMOS =~   C_REP3  10.156   -0.052   -0.065   -0.116   -0.116

Discussion

We have improved on the global fit measures, but the model is still not satisfactory.

Looking at the modification indices we find that Im9 is now the most problematic, we decide to perform another round excluding Im9.

ROUND 3

Model

# Im8, Im9, Im15 are excluded 
model_SEM <- "
DECO =~ Im3 + Im4 + Im5
FOOD =~ Im10 + Im14
ATMOS =~ Im20 + Im21 + Im22
PRODQUAL =~ Im11 + Im12 + Im13
CHOICE =~ Im1 + Im2
PROF =~ Im16 + Im19
BRAND =~ Im17 + Im18
FRENCH =~ Im6 + Im7

AFCOM =~ COM_A1 + COM_A2 + COM_A3 + COM_A4
SAT =~ SAT_1 + SAT_2 + SAT_3
RI =~  C_REP1  + C_REP2 + C_REP3
COI =~ C_CR1 + C_CR3 + C_CR4

SAT ~ s1*DECO + s2*FOOD + s3*ATMOS + s4*PRODQUAL + s5*CHOICE + s6*PROF + s7*BRAND + s8*FRENCH
AFCOM ~ a1*DECO + a2*FOOD + a3*ATMOS + a4*PRODQUAL + a5*CHOICE + a6*PROF + a7*BRAND + a8*FRENCH

RI ~ rs*SAT + ra*AFCOM + r01*DECO + r02*FOOD + r03*ATMOS + r04*PRODQUAL + r05*CHOICE + r06*PROF + r07*BRAND + r08*FRENCH
COI ~ cs*SAT + ca*AFCOM + c01*DECO + c02*FOOD + c03*ATMOS + c04*PRODQUAL + c05*CHOICE + c06*PROF + c07*BRAND + c08*FRENCH

rss1:= rs*s1
raa1:= ra*a1
css1:= cs*s1
caa1:= ca*a1
DECOtoRI_total:= r01 + rss1 + raa1
DECOtoCOI_total:= c01 + css1 + caa1

rss2:= rs*s2
raa2:= ra*a2
css2:= cs*s2
caa2:= ca*a2
FOODtoRI_total:= r02 + rss2 + raa2
FOODtoCOI_total:= c02 + css2 + caa2

rss3:= rs*s3
raa3:= ra*a3
css3:= cs*s3
caa3:= ca*a3
ATMOStoRI_total:= r03 + rss3 + raa3
ATMOStoCOI_total:= c03 + css3 + caa3

rss4:= rs*s4
raa4:= ra*a4
css4:= cs*s4
caa4:= ca*a4
PQUALtoRI_total:= r04 + rss4 + raa4
PQUALtoCOI_total:= c04 + css4 + caa4

rss5:= rs*s5
raa5:= ra*a5
css5:= cs*s5
caa5:= ca*a5
CHOICEtoRI_total:= r05 + rss5 + raa5
CHOICEtoCOI_total:= c05 + css5 + caa5

rss6:= rs*s6
raa6:= ra*a6
css6:= cs*s6
caa6:= ca*a6
PROFtoRI_total:= r06 + rss6 + raa6
PROFtoCOI_total:= c06 + css6 + caa6

rss7:= rs*s7
raa7:= ra*a7
css7:= cs*s7
caa7:= ca*a7
BRANDtoRI_total:= r07 + rss7 + raa7
BRANDtoCOI_total:= c07 + css7 + caa7

rss8:= rs*s8
raa8:= ra*a8
css8:= cs*s8
caa8:= ca*a8
FRENCHtoRI_total:= r08 + rss8 + raa8
FRENCHtoCOI_total:= c08 + css8 + caa8
"

Fit

fit_SEM <- cfa(model_SEM, data=survey, missing="ML")

SEM plot

semPaths(fit_SEM, what = "col", whatLabels = "par", style = "ram",
         rotation = 2, layout = "tree3",
         mar = c(1, 2, 1, 2), #margins
         nCharNodes = 7,
         shapeMan = "rectangle", # variable shape
         sizeMan = 4, # variable shape size
         sizeMan2 = 3, # variable shape vertical stretch
         # structural = T, # don't plot image variables (manifests)
         sizeInt = 1, # intercept size
         intercepts = F, # don't include intercepts
         sizeLat = 5, #factor size
         asize = 2, # arrow size
         curvePivot=T, # edge broken curve
         edge.label.cex = .5, # edge label size
         # edge.color = "skyblue4",
         # levels= c(1,2,7,8,9,10),
         groups = "latents",
         cut = .5 #cutoff for edges,
         )

Let us now assess this model

Global fit measures

global_fit_measures <- f_global_fit_measures(fit_SEM)
# check global fit pass/fail of global fit measures
global_fit_measures[[1]]
Value Result
pvalue 0.000 FAIL
chisq 700.455
cfi 0.974 Accept model
rmsea 0.037 Good fit

Regression results and full summary

# output full summary
global_fit_measures[[2]]
## lavaan 0.6.15 ended normally after 150 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                       161
## 
##   Number of observations                           553
##   Number of missing patterns                       135
## 
## Model Test User Model:
##                                                       
##   Test statistic                               700.455
##   Degrees of freedom                               399
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                             11978.557
##   Degrees of freedom                               496
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.974
##   Tucker-Lewis Index (TLI)                       0.967
##                                                       
##   Robust Comparative Fit Index (CFI)             0.974
##   Robust Tucker-Lewis Index (TLI)                0.968
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -22368.900
##   Loglikelihood unrestricted model (H1)     -22018.673
##                                                       
##   Akaike (AIC)                               45059.800
##   Bayesian (BIC)                             45754.573
##   Sample-size adjusted Bayesian (SABIC)      45243.488
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.037
##   90 Percent confidence interval - lower         0.032
##   90 Percent confidence interval - upper         0.041
##   P-value H_0: RMSEA <= 0.050                    1.000
##   P-value H_0: RMSEA >= 0.080                    0.000
##                                                       
##   Robust RMSEA                                   0.038
##   90 Percent confidence interval - lower         0.033
##   90 Percent confidence interval - upper         0.042
##   P-value H_0: Robust RMSEA <= 0.050             1.000
##   P-value H_0: Robust RMSEA >= 0.080             0.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.041
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   DECO =~                                                               
##     Im3               1.000                               1.235    0.936
##     Im4               1.057    0.025   42.732    0.000    1.306    0.970
##     Im5               0.818    0.034   23.806    0.000    1.011    0.760
##   FOOD =~                                                               
##     Im10              1.000                               0.810    0.921
##     Im14              1.021    0.036   28.645    0.000    0.827    0.955
##   ATMOS =~                                                              
##     Im20              1.000                               1.262    0.844
##     Im21              0.857    0.041   20.999    0.000    1.081    0.789
##     Im22              1.056    0.046   23.033    0.000    1.333    0.873
##   PRODQUAL =~                                                           
##     Im11              1.000                               0.701    0.613
##     Im12              1.414    0.094   15.006    0.000    0.991    0.872
##     Im13              1.468    0.105   13.929    0.000    1.029    0.855
##   CHOICE =~                                                             
##     Im1               1.000                               1.297    0.974
##     Im2               0.896    0.032   28.322    0.000    1.162    0.904
##   PROF =~                                                               
##     Im16              1.000                               0.919    0.764
##     Im19              1.043    0.058   17.862    0.000    0.959    0.853
##   BRAND =~                                                              
##     Im17              1.000                               1.205    0.970
##     Im18              0.992    0.041   24.108    0.000    1.196    0.855
##   FRENCH =~                                                             
##     Im6               1.000                               0.987    0.822
##     Im7               1.158    0.065   17.797    0.000    1.143    0.944
##   AFCOM =~                                                              
##     COM_A1            1.000                               1.144    0.796
##     COM_A2            1.174    0.055   21.497    0.000    1.342    0.836
##     COM_A3            1.162    0.058   20.027    0.000    1.329    0.817
##     COM_A4            1.278    0.061   20.801    0.000    1.462    0.842
##   SAT =~                                                                
##     SAT_1             1.000                               0.882    0.865
##     SAT_2             0.933    0.049   18.915    0.000    0.823    0.819
##     SAT_3             0.809    0.055   14.800    0.000    0.714    0.624
##   RI =~                                                                 
##     C_REP1            1.000                               0.596    0.816
##     C_REP2            0.971    0.043   22.489    0.000    0.579    0.931
##     C_REP3            0.702    0.037   19.037    0.000    0.419    0.756
##   COI =~                                                                
##     C_CR1             1.000                               1.658    0.851
##     C_CR3             1.033    0.051   20.244    0.000    1.712    0.826
##     C_CR4             0.963    0.049   19.765    0.000    1.597    0.806
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   SAT ~                                                                 
##     DECO      (s1)   -0.109    0.043   -2.529    0.011   -0.152   -0.152
##     FOOD      (s2)    0.081    0.065    1.238    0.216    0.074    0.074
##     ATMOS     (s3)    0.052    0.038    1.371    0.170    0.074    0.074
##     PRODQUAL  (s4)   -0.038    0.075   -0.506    0.613   -0.030   -0.030
##     CHOICE    (s5)    0.134    0.040    3.388    0.001    0.197    0.197
##     PROF      (s6)    0.459    0.087    5.249    0.000    0.479    0.479
##     BRAND     (s7)    0.008    0.045    0.178    0.859    0.011    0.011
##     FRENCH    (s8)    0.103    0.049    2.093    0.036    0.115    0.115
##   AFCOM ~                                                               
##     DECO      (a1)   -0.024    0.054   -0.441    0.659   -0.026   -0.026
##     FOOD      (a2)    0.028    0.084    0.331    0.741    0.020    0.020
##     ATMOS     (a3)    0.373    0.052    7.200    0.000    0.411    0.411
##     PRODQUAL  (a4)   -0.187    0.099   -1.899    0.058   -0.115   -0.115
##     CHOICE    (a5)    0.101    0.050    2.016    0.044    0.114    0.114
##     PROF      (a6)    0.160    0.105    1.519    0.129    0.129    0.129
##     BRAND     (a7)   -0.018    0.058   -0.305    0.761   -0.019   -0.019
##     FRENCH    (a8)    0.223    0.064    3.483    0.000    0.192    0.192
##   RI ~                                                                  
##     SAT       (rs)    0.215    0.045    4.776    0.000    0.318    0.318
##     AFCOM     (ra)    0.184    0.030    6.145    0.000    0.354    0.354
##     DECO     (r01)    0.010    0.029    0.333    0.739    0.020    0.020
##     FOOD     (r02)    0.038    0.043    0.867    0.386    0.051    0.051
##     ATMOS    (r03)    0.040    0.028    1.428    0.153    0.085    0.085
##     PRODQUAL (r04)    0.077    0.051    1.504    0.133    0.091    0.091
##     CHOICE   (r05)   -0.017    0.026   -0.652    0.515   -0.037   -0.037
##     PROF     (r06)   -0.037    0.060   -0.608    0.543   -0.056   -0.056
##     BRAND    (r07)   -0.011    0.030   -0.363    0.717   -0.022   -0.022
##     FRENCH   (r08)   -0.034    0.033   -1.010    0.312   -0.056   -0.056
##   COI ~                                                                 
##     SAT       (cs)   -0.357    0.131   -2.719    0.007   -0.190   -0.190
##     AFCOM     (ca)    0.546    0.091    6.015    0.000    0.377    0.377
##     DECO     (c01)   -0.031    0.090   -0.346    0.729   -0.023   -0.023
##     FOOD     (c02)   -0.080    0.134   -0.592    0.554   -0.039   -0.039
##     ATMOS    (c03)    0.152    0.087    1.739    0.082    0.116    0.116
##     PRODQUAL (c04)    0.197    0.159    1.237    0.216    0.083    0.083
##     CHOICE   (c05)   -0.006    0.080   -0.077    0.939   -0.005   -0.005
##     PROF     (c06)   -0.176    0.184   -0.957    0.338   -0.098   -0.098
##     BRAND    (c07)    0.022    0.092    0.241    0.809    0.016    0.016
##     FRENCH   (c08)   -0.127    0.104   -1.220    0.223   -0.075   -0.075
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   DECO ~~                                                               
##     FOOD              0.417    0.050    8.386    0.000    0.417    0.417
##     ATMOS             0.728    0.082    8.916    0.000    0.467    0.467
##     PRODQUAL          0.407    0.051    8.024    0.000    0.470    0.470
##     CHOICE            0.708    0.079    9.017    0.000    0.442    0.442
##     PROF              0.744    0.070   10.551    0.000    0.655    0.655
##     BRAND             0.769    0.076   10.128    0.000    0.516    0.516
##     FRENCH            0.413    0.063    6.533    0.000    0.339    0.339
##   FOOD ~~                                                               
##     ATMOS             0.301    0.051    5.948    0.000    0.295    0.295
##     PRODQUAL          0.256    0.034    7.643    0.000    0.452    0.452
##     CHOICE            0.327    0.050    6.610    0.000    0.312    0.312
##     PROF              0.371    0.043    8.626    0.000    0.499    0.499
##     BRAND             0.317    0.047    6.796    0.000    0.325    0.325
##     FRENCH            0.469    0.047   10.033    0.000    0.587    0.587
##   ATMOS ~~                                                              
##     PRODQUAL          0.370    0.053    7.014    0.000    0.418    0.418
##     CHOICE            0.732    0.084    8.676    0.000    0.447    0.447
##     PROF              0.552    0.068    8.106    0.000    0.476    0.476
##     BRAND             0.785    0.081    9.709    0.000    0.516    0.516
##     FRENCH            0.415    0.065    6.397    0.000    0.333    0.333
##   PRODQUAL ~~                                                           
##     CHOICE            0.433    0.053    8.113    0.000    0.477    0.477
##     PROF              0.342    0.043    7.966    0.000    0.531    0.531
##     BRAND             0.477    0.053    9.030    0.000    0.565    0.565
##     FRENCH            0.211    0.038    5.616    0.000    0.305    0.305
##   CHOICE ~~                                                             
##     PROF              0.717    0.071   10.049    0.000    0.602    0.602
##     BRAND             0.814    0.079   10.355    0.000    0.521    0.521
##     FRENCH            0.292    0.061    4.789    0.000    0.228    0.228
##   PROF ~~                                                               
##     BRAND             0.667    0.066   10.107    0.000    0.602    0.602
##     FRENCH            0.336    0.051    6.571    0.000    0.370    0.370
##   BRAND ~~                                                              
##     FRENCH            0.389    0.061    6.349    0.000    0.327    0.327
##  .RI ~~                                                                 
##    .COI              -0.015    0.038   -0.386    0.699   -0.020   -0.020
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Im3               4.995    0.056   88.568    0.000    4.995    3.786
##    .Im4               4.999    0.057   86.997    0.000    4.999    3.712
##    .Im5               5.036    0.057   87.850    0.000    5.036    3.787
##    .Im10              6.100    0.037  162.780    0.000    6.100    6.936
##    .Im14              6.138    0.037  165.854    0.000    6.138    7.093
##    .Im20              4.672    0.064   73.218    0.000    4.672    3.125
##    .Im21              5.139    0.058   87.977    0.000    5.139    3.750
##    .Im22              4.280    0.065   65.480    0.000    4.280    2.802
##    .Im11              5.653    0.049  115.299    0.000    5.653    4.944
##    .Im12              5.665    0.049  116.160    0.000    5.665    4.986
##    .Im13              5.448    0.052  105.690    0.000    5.448    4.527
##    .Im1               4.792    0.057   84.292    0.000    4.792    3.600
##    .Im2               4.858    0.055   88.417    0.000    4.858    3.781
##    .Im16              5.135    0.052   99.193    0.000    5.135    4.270
##    .Im19              5.145    0.048  107.021    0.000    5.145    4.576
##    .Im17              5.025    0.053   94.554    0.000    5.025    4.042
##    .Im18              4.595    0.060   76.460    0.000    4.595    3.287
##    .Im6               5.828    0.051  113.798    0.000    5.828    4.858
##    .Im7               5.754    0.052  110.817    0.000    5.754    4.756
##    .COM_A1            4.287    0.061   69.746    0.000    4.287    2.983
##    .COM_A2            3.887    0.069   56.667    0.000    3.887    2.420
##    .COM_A3            3.543    0.070   50.856    0.000    3.543    2.178
##    .COM_A4            3.456    0.074   46.672    0.000    3.456    1.991
##    .SAT_1             5.343    0.043  122.952    0.000    5.343    5.239
##    .SAT_2             5.482    0.043  127.741    0.000    5.482    5.455
##    .SAT_3             5.458    0.050  109.429    0.000    5.458    4.774
##    .C_REP1            4.283    0.031  137.513    0.000    4.283    5.859
##    .C_REP2            4.507    0.027  169.647    0.000    4.507    7.250
##    .C_REP3            4.677    0.024  196.938    0.000    4.677    8.445
##    .C_CR1             2.679    0.084   32.074    0.000    2.679    1.375
##    .C_CR3             3.261    0.088   36.878    0.000    3.261    1.572
##    .C_CR4             2.786    0.085   32.900    0.000    2.786    1.405
##     DECO              0.000                               0.000    0.000
##     FOOD              0.000                               0.000    0.000
##     ATMOS             0.000                               0.000    0.000
##     PRODQUAL          0.000                               0.000    0.000
##     CHOICE            0.000                               0.000    0.000
##     PROF              0.000                               0.000    0.000
##     BRAND             0.000                               0.000    0.000
##     FRENCH            0.000                               0.000    0.000
##    .AFCOM             0.000                               0.000    0.000
##    .SAT               0.000                               0.000    0.000
##    .RI                0.000                               0.000    0.000
##    .COI               0.000                               0.000    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Im3               0.214    0.024    8.793    0.000    0.214    0.123
##    .Im4               0.108    0.024    4.490    0.000    0.108    0.060
##    .Im5               0.747    0.049   15.219    0.000    0.747    0.422
##    .Im10              0.118    0.019    6.214    0.000    0.118    0.153
##    .Im14              0.066    0.019    3.503    0.000    0.066    0.088
##    .Im20              0.644    0.059   10.844    0.000    0.644    0.288
##    .Im21              0.708    0.056   12.627    0.000    0.708    0.377
##    .Im22              0.557    0.061    9.079    0.000    0.557    0.239
##    .Im11              0.817    0.055   14.814    0.000    0.817    0.625
##    .Im12              0.309    0.040    7.819    0.000    0.309    0.240
##    .Im13              0.389    0.045    8.748    0.000    0.389    0.269
##    .Im1               0.090    0.047    1.934    0.053    0.090    0.051
##    .Im2               0.302    0.041    7.299    0.000    0.302    0.183
##    .Im16              0.602    0.050   11.936    0.000    0.602    0.416
##    .Im19              0.345    0.044    7.931    0.000    0.345    0.273
##    .Im17              0.092    0.045    2.041    0.041    0.092    0.060
##    .Im18              0.524    0.055    9.575    0.000    0.524    0.268
##    .Im6               0.466    0.053    8.770    0.000    0.466    0.324
##    .Im7               0.158    0.061    2.610    0.009    0.158    0.108
##    .COM_A1            0.757    0.058   12.955    0.000    0.757    0.366
##    .COM_A2            0.779    0.065   11.912    0.000    0.779    0.302
##    .COM_A3            0.880    0.070   12.501    0.000    0.880    0.333
##    .COM_A4            0.875    0.075   11.711    0.000    0.875    0.290
##    .SAT_1             0.262    0.034    7.744    0.000    0.262    0.252
##    .SAT_2             0.332    0.033    9.961    0.000    0.332    0.329
##    .SAT_3             0.798    0.056   14.347    0.000    0.798    0.610
##    .C_REP1            0.179    0.016   11.294    0.000    0.179    0.334
##    .C_REP2            0.051    0.010    4.951    0.000    0.051    0.133
##    .C_REP3            0.131    0.009   14.059    0.000    0.131    0.428
##    .C_CR1             1.047    0.113    9.302    0.000    1.047    0.276
##    .C_CR3             1.369    0.130   10.569    0.000    1.369    0.318
##    .C_CR4             1.378    0.122   11.300    0.000    1.378    0.351
##     DECO              1.526    0.107   14.319    0.000    1.000    1.000
##     FOOD              0.655    0.049   13.290    0.000    1.000    1.000
##     ATMOS             1.591    0.136   11.660    0.000    1.000    1.000
##     PRODQUAL          0.491    0.067    7.337    0.000    1.000    1.000
##     CHOICE            1.682    0.117   14.431    0.000    1.000    1.000
##     PROF              0.845    0.087    9.728    0.000    1.000    1.000
##     BRAND             1.453    0.104   14.011    0.000    1.000    1.000
##     FRENCH            0.974    0.094   10.397    0.000    1.000    1.000
##    .AFCOM             0.862    0.086   10.043    0.000    0.659    0.659
##    .SAT               0.449    0.047    9.464    0.000    0.576    0.576
##    .RI                0.237    0.022   10.945    0.000    0.667    0.667
##    .COI               2.280    0.208   10.946    0.000    0.829    0.829
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     rss1             -0.023    0.010   -2.223    0.026   -0.048   -0.048
##     raa1             -0.004    0.010   -0.440    0.660   -0.009   -0.009
##     css1              0.039    0.021    1.862    0.063    0.029    0.029
##     caa1             -0.013    0.030   -0.439    0.660   -0.010   -0.010
##     DECOtoRI_total   -0.018    0.030   -0.592    0.554   -0.037   -0.037
##     DECOtoCOI_totl   -0.006    0.092   -0.060    0.952   -0.004   -0.004
##     rss2              0.017    0.014    1.203    0.229    0.023    0.023
##     raa2              0.005    0.016    0.330    0.741    0.007    0.007
##     css2             -0.029    0.026   -1.123    0.261   -0.014   -0.014
##     caa2              0.015    0.046    0.330    0.741    0.007    0.007
##     FOODtoRI_total    0.060    0.047    1.280    0.200    0.082    0.082
##     FOODtoCOI_totl   -0.093    0.141   -0.662    0.508   -0.045   -0.045
##     rss3              0.011    0.008    1.326    0.185    0.024    0.024
##     raa3              0.069    0.014    4.790    0.000    0.145    0.145
##     css3             -0.019    0.015   -1.213    0.225   -0.014   -0.014
##     caa3              0.204    0.043    4.755    0.000    0.155    0.155
##     ATMOStoRI_totl    0.120    0.028    4.255    0.000    0.254    0.254
##     ATMOStoCOI_ttl    0.337    0.084    4.021    0.000    0.256    0.256
##     rss4             -0.008    0.016   -0.503    0.615   -0.010   -0.010
##     raa4             -0.035    0.019   -1.810    0.070   -0.041   -0.041
##     css4              0.014    0.027    0.499    0.618    0.006    0.006
##     caa4             -0.102    0.057   -1.807    0.071   -0.043   -0.043
##     PQUALtoRI_totl    0.034    0.055    0.628    0.530    0.040    0.040
##     PQUALtoCOI_ttl    0.108    0.164    0.656    0.512    0.046    0.046
##     rss5              0.029    0.010    2.843    0.004    0.063    0.063
##     raa5              0.019    0.010    1.921    0.055    0.040    0.040
##     css5             -0.048    0.023   -2.114    0.035   -0.038   -0.038
##     caa5              0.055    0.029    1.926    0.054    0.043    0.043
##     CHOICEtoRI_ttl    0.031    0.028    1.109    0.267    0.067    0.067
##     CHOICEtCOI_ttl    0.001    0.083    0.011    0.991    0.001    0.001
##     rss6              0.099    0.028    3.480    0.001    0.152    0.152
##     raa6              0.030    0.020    1.475    0.140    0.045    0.045
##     css6             -0.164    0.067   -2.446    0.014   -0.091   -0.091
##     caa6              0.087    0.060    1.464    0.143    0.048    0.048
##     PROFtoRI_total    0.091    0.058    1.563    0.118    0.141    0.141
##     PROFtoCOI_totl   -0.253    0.172   -1.470    0.142   -0.140   -0.140
##     rss7              0.002    0.010    0.178    0.859    0.003    0.003
##     raa7             -0.003    0.011   -0.304    0.761   -0.007   -0.007
##     css7             -0.003    0.016   -0.177    0.859   -0.002   -0.002
##     caa7             -0.010    0.032   -0.304    0.761   -0.007   -0.007
##     BRANDtoRI_totl   -0.012    0.032   -0.383    0.702   -0.025   -0.025
##     BRANDtoCOI_ttl    0.010    0.096    0.101    0.919    0.007    0.007
##     rss8              0.022    0.011    1.928    0.054    0.037    0.037
##     raa8              0.041    0.013    3.043    0.002    0.068    0.068
##     css8             -0.037    0.022   -1.669    0.095   -0.022   -0.022
##     caa8              0.122    0.040    3.027    0.002    0.072    0.072
##     FRENCHtoRI_ttl    0.029    0.035    0.835    0.404    0.049    0.049
##     FRENCHtCOI_ttl   -0.042    0.106   -0.395    0.693   -0.025   -0.025

local fit measures

lambda = inspect(fit_SEM, what="std")$lambda
theta = inspect(fit_SEM, what="std")$theta
psi = inspect(fit_SEM, what="std")$psi

Indicator reliability criterion (Individual Item Reliability)

# calculate indicator reliabilities (should be larger than 0.4)
indic_rel <- f_indic_rel(lambda, theta)
# pass/fail
indic_rel[[1]]
Result
Individual Item Reliability Fail
# details
indic_rel[[2]]
##         DECO  FOOD ATMOS PRODQU CHOICE  PROF BRAND FRENCH AFCOM   SAT    RI
## Im3    0.877   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im4    0.940   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im5    0.578   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im10     NaN 0.847   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im14     NaN 0.912   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im20     NaN   NaN 0.712    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im21     NaN   NaN 0.623    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im22     NaN   NaN 0.761    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im11     NaN   NaN   NaN  0.375    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im12     NaN   NaN   NaN  0.760    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im13     NaN   NaN   NaN  0.731    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im1      NaN   NaN   NaN    NaN  0.949   NaN   NaN    NaN   NaN   NaN   NaN
## Im2      NaN   NaN   NaN    NaN  0.817   NaN   NaN    NaN   NaN   NaN   NaN
## Im16     NaN   NaN   NaN    NaN    NaN 0.584   NaN    NaN   NaN   NaN   NaN
## Im19     NaN   NaN   NaN    NaN    NaN 0.727   NaN    NaN   NaN   NaN   NaN
## Im17     NaN   NaN   NaN    NaN    NaN   NaN 0.940    NaN   NaN   NaN   NaN
## Im18     NaN   NaN   NaN    NaN    NaN   NaN 0.732    NaN   NaN   NaN   NaN
## Im6      NaN   NaN   NaN    NaN    NaN   NaN   NaN  0.676   NaN   NaN   NaN
## Im7      NaN   NaN   NaN    NaN    NaN   NaN   NaN  0.892   NaN   NaN   NaN
## COM_A1   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.634   NaN   NaN
## COM_A2   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.698   NaN   NaN
## COM_A3   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.667   NaN   NaN
## COM_A4   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.710   NaN   NaN
## SAT_1    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN 0.748   NaN
## SAT_2    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN 0.671   NaN
## SAT_3    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN 0.390   NaN
## C_REP1   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN 0.666
## C_REP2   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN 0.867
## C_REP3   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN 0.572
## C_CR1    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## C_CR3    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## C_CR4    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
##          COI
## Im3      NaN
## Im4      NaN
## Im5      NaN
## Im10     NaN
## Im14     NaN
## Im20     NaN
## Im21     NaN
## Im22     NaN
## Im11     NaN
## Im12     NaN
## Im13     NaN
## Im1      NaN
## Im2      NaN
## Im16     NaN
## Im19     NaN
## Im17     NaN
## Im18     NaN
## Im6      NaN
## Im7      NaN
## COM_A1   NaN
## COM_A2   NaN
## COM_A3   NaN
## COM_A4   NaN
## SAT_1    NaN
## SAT_2    NaN
## SAT_3    NaN
## C_REP1   NaN
## C_REP2   NaN
## C_REP3   NaN
## C_CR1  0.724
## C_CR3  0.682
## C_CR4  0.649

Construct reliability criterion

# calculate construct reliability (should be above .6)
construct_rel <- f_construct_rel(lambda,theta)
# pass/fail
construct_rel[[1]]
Result
Construct Reliability Pass
# details
construct_rel[[2]]
##               DECO      FOOD     ATMOS  PRODQUAL    CHOICE      PROF     BRAND
## DECO     0.9215576       NaN       NaN       NaN       NaN       NaN       NaN
## FOOD           NaN 0.9360531       NaN       NaN       NaN       NaN       NaN
## ATMOS          NaN       NaN 0.8740997       NaN       NaN       NaN       NaN
## PRODQUAL       NaN       NaN       NaN 0.8285131       NaN       NaN       NaN
## CHOICE         NaN       NaN       NaN       NaN 0.9379212       NaN       NaN
## PROF           NaN       NaN       NaN       NaN       NaN 0.7914389       NaN
## BRAND          NaN       NaN       NaN       NaN       NaN       NaN 0.9103502
## FRENCH         NaN       NaN       NaN       NaN       NaN       NaN       NaN
## AFCOM          NaN       NaN       NaN       NaN       NaN       NaN       NaN
## SAT            NaN       NaN       NaN       NaN       NaN       NaN       NaN
## RI             NaN       NaN       NaN       NaN       NaN       NaN       NaN
## COI            NaN       NaN       NaN       NaN       NaN       NaN       NaN
##             FRENCH     AFCOM       SAT        RI       COI
## DECO           NaN       NaN       NaN       NaN       NaN
## FOOD           NaN       NaN       NaN       NaN       NaN
## ATMOS          NaN       NaN       NaN       NaN       NaN
## PRODQUAL       NaN       NaN       NaN       NaN       NaN
## CHOICE         NaN       NaN       NaN       NaN       NaN
## PROF           NaN       NaN       NaN       NaN       NaN
## BRAND          NaN       NaN       NaN       NaN       NaN
## FRENCH   0.8785003       NaN       NaN       NaN       NaN
## AFCOM          NaN 0.8934602       NaN       NaN       NaN
## SAT            NaN       NaN 0.8173149       NaN       NaN
## RI             NaN       NaN       NaN 0.8749194       NaN
## COI            NaN       NaN       NaN       NaN 0.8670792

Average Variance Extracted criterion

# calculate Average Variance Extracted (should be above .5)
AVE <- f_AVE(lambda,theta)
# pass/fail
AVE[[1]]
Result
Average Variance Extracted Pass
# details
diag(AVE[[2]])
##      DECO      FOOD     ATMOS  PRODQUAL    CHOICE      PROF     BRAND    FRENCH 
## 0.7983093 0.8798287 0.6986336 0.6223004 0.8832435 0.6555350 0.8359891 0.7841305 
##     AFCOM       SAT        RI       COI 
## 0.6771639 0.6029676 0.7014342 0.6850899

Construct correlations

# correlations between constructs (factors...) should be lower than .7
construct_cor <- f_construct_corr(psi)
# pass / fail
construct_cor[[1]]
Result
Construct Correlations Pass
# details
construct_cor[[2]]
##            DECO   FOOD  ATMOS PRODQU CHOICE   PROF  BRAND FRENCH  AFCOM    SAT
## DECO      1.000                                                               
## FOOD      0.417  1.000                                                        
## ATMOS     0.467  0.295  1.000                                                 
## PRODQUAL  0.470  0.452  0.418  1.000                                          
## CHOICE    0.442  0.312  0.447  0.477  1.000                                   
## PROF      0.655  0.499  0.476  0.531  0.602  1.000                            
## BRAND     0.516  0.325  0.516  0.565  0.521  0.602  1.000                     
## FRENCH    0.339  0.587  0.333  0.305  0.228  0.370  0.327  1.000              
## AFCOM     0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.659       
## SAT       0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.576
## RI        0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000
## COI       0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000
##              RI    COI
## DECO                  
## FOOD                  
## ATMOS                 
## PRODQUAL              
## CHOICE                
## PROF                  
## BRAND                 
## FRENCH                
## AFCOM                 
## SAT                   
## RI        0.667       
## COI      -0.020  0.829

Fornell-Larcker Criteria

# AVE should be higher than squared correlations between constructs
fornell_larcker <- f_fornell_larcker(psi,AVE[[2]])
# pass / fail
fornell_larcker[[1]]
Result
Fornell-Larcker Criteria Pass
# details (note: AVE is in the diagonals)
fornell_larcker[[2]]
##           DECO  FOOD ATMOS PRODQU CHOICE  PROF BRAND FRENCH AFCOM   SAT    RI
## DECO     0.798                                                               
## FOOD     0.174 0.880                                                         
## ATMOS    0.218 0.087 0.699                                                   
## PRODQUAL 0.221 0.204 0.175  0.622                                            
## CHOICE   0.195 0.097 0.200  0.228  0.883                                     
## PROF     0.429 0.249 0.227  0.282  0.362 0.656                               
## BRAND    0.266 0.106 0.266  0.319  0.271 0.362 0.836                         
## FRENCH   0.115 0.345 0.111  0.093  0.052 0.137 0.107  0.784                  
## AFCOM    0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.677            
## SAT      0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.603      
## RI       0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.000 0.701
## COI      0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.000 0.000
##            COI
## DECO          
## FOOD          
## ATMOS         
## PRODQUAL      
## CHOICE        
## PROF          
## BRAND         
## FRENCH        
## AFCOM         
## SAT           
## RI            
## COI      0.685

Modification indices

arrange(modificationindices(fit_SEM),-mi) |> filter(mi>10)
##         lhs op    rhs     mi    epc sepc.lv sepc.all sepc.nox
## 1     AFCOM =~ C_REP1 56.860  0.174   0.199    0.272    0.272
## 2    C_REP2 ~~ C_REP3 53.856  0.103   0.103    1.250    1.250
## 3      Im10 ~~   Im14 37.578 98.306  98.306 1116.018 1116.018
## 4       Im6 ~~    Im7 37.386 10.888  10.888   40.087   40.087
## 5       SAT  ~    COI 37.385  0.457   0.859    0.859    0.859
## 6     AFCOM  ~    COI 37.384 -1.343  -1.946   -1.946   -1.946
## 7     AFCOM  ~    SAT 37.384  0.480   0.370    0.370    0.370
## 8       SAT  ~  AFCOM 37.384  0.250   0.324    0.324    0.324
## 9     AFCOM ~~    SAT 37.384  0.215   0.346    0.346    0.346
## 10    AFCOM  ~     RI 37.384  2.236   1.166    1.166    1.166
## 11      SAT  ~     RI 37.384  1.354   0.915    0.915    0.915
## 12     Im16 ~~   Im19 37.375  3.054   3.054    6.702    6.702
## 13      Im1 ~~    Im2 37.373 14.223  14.223   86.295   86.295
## 14   COM_A1 ~~ COM_A2 24.605  0.250   0.250    0.326    0.326
## 15    BRAND =~   Im13 23.644  0.217   0.262    0.218    0.218
## 16    ATMOS =~ C_REP1 21.773  0.091   0.115    0.157    0.157
## 17     Im11 ~~   Im13 19.981 -0.183  -0.183   -0.324   -0.324
## 18   C_REP1 ~~ C_REP3 18.365 -0.056  -0.056   -0.368   -0.368
## 19    BRAND =~   Im12 17.448 -0.179  -0.215   -0.190   -0.190
## 20    AFCOM =~ C_REP2 15.936 -0.079  -0.091   -0.146   -0.146
## 21       RI =~  SAT_2 15.148  0.256   0.153    0.152    0.152
## 22   CHOICE =~   Im20 14.303 -0.150  -0.194   -0.130   -0.130
## 23     Im21 ~~   Im22 14.074 -0.239  -0.239   -0.381   -0.381
## 24     Im11 ~~   Im12 13.834  0.146   0.146    0.291    0.291
## 25   CHOICE =~   Im13 13.663  0.133   0.172    0.143    0.143
## 26    AFCOM =~   Im11 13.312  0.142   0.163    0.142    0.142
## 27   COM_A3 ~~ C_REP1 13.001  0.077   0.077    0.194    0.194
## 28     FOOD =~   Im11 12.873  0.216   0.175    0.153    0.153
## 29      SAT =~ COM_A3 12.402  0.212   0.187    0.115    0.115
## 30    AFCOM =~ C_REP3 12.246 -0.065  -0.075   -0.135   -0.135
## 31     Im21 ~~ C_REP3 11.210  0.052   0.052    0.172    0.172
## 32    ATMOS =~   Im12 11.167 -0.115  -0.145   -0.128   -0.128
## 33 PRODQUAL =~  C_CR4 11.166  0.305   0.214    0.108    0.108
## 34       RI =~ COM_A1 11.069  0.291   0.174    0.121    0.121
## 35   CHOICE =~   Im12 10.903 -0.113  -0.147   -0.129   -0.129
## 36   CHOICE =~ C_REP1 10.720  0.056   0.073    0.100    0.100
## 37     Im13 ~~    Im1 10.522  0.067   0.067    0.356    0.356

Discussion

This model is much better and is satisfactory as we can see from the fit assessments above.

Looking at the modification indices we see that variable C_REP1 wants to link up with AFCOM, but changing this configuration makes the model perform much worse.

Finally we check if we can improve the model by adding some correlations between the mediators and the outcome dimensions. This makes sense as we would expect Customer Satisfaction and Affective commitment to be correlated and Repurchase Intention and Cocreation intention to also be correlated to each other.

ROUND 4

Model

# Im8, Im9, Im15 are excluded
# we have allowed correlation between SAT and AFCOM and also between RI and COI
model_SEM <- "
DECO =~ Im3 + Im4 + Im5
FOOD =~ Im10 + Im14
ATMOS =~ Im20 + Im21 + Im22
PRODQUAL =~ Im11 + Im12 + Im13
CHOICE =~ Im1 + Im2
PROF =~ Im16 + Im19
BRAND =~ Im17 + Im18
FRENCH =~ Im6 + Im7

AFCOM =~ COM_A1 + COM_A2 + COM_A3 + COM_A4
SAT =~ SAT_1 + SAT_2 + SAT_3
RI =~ C_REP1 + C_REP2 + C_REP3
COI =~ C_CR1 + C_CR2 + C_CR3 + C_CR4

SAT ~ s1*DECO + s2*FOOD + s3*ATMOS + s4*PRODQUAL + s5*CHOICE + s6*PROF + s7*BRAND + s8*FRENCH
AFCOM ~ a1*DECO + a2*FOOD + a3*ATMOS + a4*PRODQUAL + a5*CHOICE + a6*PROF + a7*BRAND + a8*FRENCH
SAT ~~ AFCOM

RI ~ rs*SAT + ra*AFCOM + r01*DECO + r02*FOOD + r03*ATMOS + r04*PRODQUAL + r05*CHOICE + r06*PROF + r07*BRAND + r08*FRENCH
COI ~ cs*SAT + ca*AFCOM + c01*DECO + c02*FOOD + c03*ATMOS + c04*PRODQUAL + c05*CHOICE + c06*PROF + c07*BRAND + c08*FRENCH
RI ~~ COI

rss1:= rs*s1
raa1:= ra*a1
css1:= cs*s1
caa1:= ca*a1
DECOtoRI:= r01 + rss1 + raa1
DECOtoCOI:= c01 + css1 + caa1

rss2:= rs*s2
raa2:= ra*a2
css2:= cs*s2
caa2:= ca*a2
FOODtoRI_total:= r02 + rss2 + raa2
FOODtoCOI_total:= c02 + css2 + caa2

rss3:= rs*s3
raa3:= ra*a3
css3:= cs*s3
caa3:= ca*a3
ATMOStoRI_total:= r03 + rss3 + raa3
ATMOStoCOI_total:= c03 + css3 + caa3

rss4:= rs*s4
raa4:= ra*a4
css4:= cs*s4
caa4:= ca*a4
PQUALtoRI_total:= r04 + rss4 + raa4
PQUALtoCOI_total:= c04 + css4 + caa4

rss5:= rs*s5
raa5:= ra*a5
css5:= cs*s5
caa5:= ca*a5
CHOICEtoRI_total:= r05 + rss5 + raa5
CHOICEtoCOI_total:= c05 + css5 + caa5

rss6:= rs*s6
raa6:= ra*a6
css6:= cs*s6
caa6:= ca*a6
PROFtoRI_total:= r06 + rss6 + raa6
PROFtoCOI_total:= c06 + css6 + caa6

rss7:= rs*s7
raa7:= ra*a7
css7:= cs*s7
caa7:= ca*a7
BRANDtoRI_total:= r07 + rss7 + raa7
BRANDtoCOI_total:= c07 + css7 + caa7

rss8:= rs*s8
raa8:= ra*a8
css8:= cs*s8
caa8:= ca*a8
FRENCHtoRI_total:= r08 + rss8 + raa8
FRENCHtoCOI_total:= c08 + css8 + caa8
"

Fit

fit_SEM <- cfa(model_SEM, data=survey, missing="ML")

SEM plot

semPaths(fit_SEM, what = "col", whatLabels = "par", style = "ram",
         rotation = 2, layout = "tree3",
         mar = c(1, 2, 1, 2), #margins
         nCharNodes = 7,
         shapeMan = "rectangle", # variable shape
         sizeMan = 4, # variable shape size
         sizeMan2 = 3, # variable shape vertical stretch
         # structural = T, # don't plot image variables (manifests)
         sizeInt = 1, # intercept size
         intercepts = F, # don't include intercepts
         sizeLat = 5, #factor size
         asize = 2, # arrow size
         curvePivot=T, # edge broken curve
         edge.label.cex = .5, # edge label size
         # edge.color = "skyblue4",
         # levels= c(1,2,7,8,9,10),
         groups = "latents",
         cut = .5 #cutoff for edges,
         )

Let us now assess this model

Global fit measures

global_fit_measures <- f_global_fit_measures(fit_SEM)
# check global fit pass/fail of global fit measures
global_fit_measures[[1]]
Value Result
pvalue 0.000 FAIL
chisq 711.708
cfi 0.976 Accept model
rmsea 0.035 Good fit

Regression results and full summary

# output full summary
global_fit_measures[[2]]
## lavaan 0.6.15 ended normally after 146 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                       165
## 
##   Number of observations                           553
##   Number of missing patterns                       144
## 
## Model Test User Model:
##                                                       
##   Test statistic                               711.708
##   Degrees of freedom                               429
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                             12148.481
##   Degrees of freedom                               528
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.976
##   Tucker-Lewis Index (TLI)                       0.970
##                                                       
##   Robust Comparative Fit Index (CFI)             0.976
##   Robust Tucker-Lewis Index (TLI)                0.970
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -23357.440
##   Loglikelihood unrestricted model (H1)     -23001.586
##                                                       
##   Akaike (AIC)                               47044.880
##   Bayesian (BIC)                             47756.914
##   Sample-size adjusted Bayesian (SABIC)      47233.130
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.035
##   90 Percent confidence interval - lower         0.030
##   90 Percent confidence interval - upper         0.039
##   P-value H_0: RMSEA <= 0.050                    1.000
##   P-value H_0: RMSEA >= 0.080                    0.000
##                                                       
##   Robust RMSEA                                   0.035
##   90 Percent confidence interval - lower         0.030
##   90 Percent confidence interval - upper         0.040
##   P-value H_0: Robust RMSEA <= 0.050             1.000
##   P-value H_0: Robust RMSEA >= 0.080             0.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.038
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Observed
##   Observed information based on                Hessian
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   DECO =~                                                               
##     Im3               1.000                               1.235    0.936
##     Im4               1.057    0.025   42.733    0.000    1.306    0.970
##     Im5               0.818    0.034   23.809    0.000    1.011    0.760
##   FOOD =~                                                               
##     Im10              1.000                               0.810    0.921
##     Im14              1.020    0.036   28.621    0.000    0.826    0.955
##   ATMOS =~                                                              
##     Im20              1.000                               1.261    0.843
##     Im21              0.857    0.041   20.991    0.000    1.080    0.788
##     Im22              1.059    0.046   23.008    0.000    1.335    0.874
##   PRODQUAL =~                                                           
##     Im11              1.000                               0.701    0.613
##     Im12              1.413    0.094   15.002    0.000    0.990    0.871
##     Im13              1.470    0.106   13.916    0.000    1.030    0.856
##   CHOICE =~                                                             
##     Im1               1.000                               1.300    0.977
##     Im2               0.892    0.032   27.977    0.000    1.159    0.902
##   PROF =~                                                               
##     Im16              1.000                               0.923    0.767
##     Im19              1.041    0.059   17.769    0.000    0.961    0.854
##   BRAND =~                                                              
##     Im17              1.000                               1.205    0.970
##     Im18              0.992    0.041   24.118    0.000    1.196    0.855
##   FRENCH =~                                                             
##     Im6               1.000                               0.983    0.819
##     Im7               1.167    0.067   17.504    0.000    1.147    0.948
##   AFCOM =~                                                              
##     COM_A1            1.000                               1.142    0.795
##     COM_A2            1.168    0.055   21.339    0.000    1.333    0.830
##     COM_A3            1.168    0.058   20.111    0.000    1.334    0.820
##     COM_A4            1.285    0.062   20.892    0.000    1.467    0.845
##   SAT =~                                                                
##     SAT_1             1.000                               0.875    0.858
##     SAT_2             0.948    0.049   19.422    0.000    0.829    0.826
##     SAT_3             0.816    0.055   14.852    0.000    0.714    0.624
##   RI =~                                                                 
##     C_REP1            1.000                               0.605    0.820
##     C_REP2            0.970    0.043   22.491    0.000    0.587    0.933
##     C_REP3            0.702    0.037   19.032    0.000    0.424    0.760
##   COI =~                                                                
##     C_CR1             1.000                               1.626    0.841
##     C_CR2             0.559    0.051   10.906    0.000    0.909    0.488
##     C_CR3             1.053    0.051   20.683    0.000    1.713    0.831
##     C_CR4             0.972    0.048   20.203    0.000    1.580    0.802
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   SAT ~                                                                 
##     DECO      (s1)   -0.099    0.042   -2.353    0.019   -0.140   -0.140
##     FOOD      (s2)    0.088    0.064    1.379    0.168    0.082    0.082
##     ATMOS     (s3)    0.037    0.038    0.973    0.331    0.053    0.053
##     PRODQUAL  (s4)   -0.023    0.075   -0.309    0.758   -0.018   -0.018
##     CHOICE    (s5)    0.135    0.039    3.484    0.000    0.200    0.200
##     PROF      (s6)    0.435    0.082    5.300    0.000    0.459    0.459
##     BRAND     (s7)    0.015    0.044    0.347    0.728    0.021    0.021
##     FRENCH    (s8)    0.096    0.049    1.983    0.047    0.108    0.108
##   AFCOM ~                                                               
##     DECO      (a1)    0.006    0.054    0.108    0.914    0.006    0.006
##     FOOD      (a2)    0.049    0.083    0.590    0.555    0.035    0.035
##     ATMOS     (a3)    0.372    0.052    7.208    0.000    0.411    0.411
##     PRODQUAL  (a4)   -0.176    0.098   -1.793    0.073   -0.108   -0.108
##     CHOICE    (a5)    0.114    0.049    2.313    0.021    0.130    0.130
##     PROF      (a6)    0.059    0.101    0.586    0.558    0.048    0.048
##     BRAND     (a7)   -0.001    0.057   -0.017    0.987   -0.001   -0.001
##     FRENCH    (a8)    0.218    0.064    3.427    0.001    0.188    0.188
##   RI ~                                                                  
##     SAT       (rs)    0.212    0.047    4.510    0.000    0.306    0.306
##     AFCOM     (ra)    0.173    0.031    5.515    0.000    0.326    0.326
##     DECO     (r01)    0.008    0.029    0.286    0.775    0.017    0.017
##     FOOD     (r02)    0.038    0.043    0.875    0.382    0.051    0.051
##     ATMOS    (r03)    0.045    0.028    1.602    0.109    0.095    0.095
##     PRODQUAL (r04)    0.074    0.051    1.446    0.148    0.086    0.086
##     CHOICE   (r05)   -0.015    0.026   -0.570    0.569   -0.031   -0.031
##     PROF     (r06)   -0.031    0.059   -0.531    0.595   -0.048   -0.048
##     BRAND    (r07)   -0.011    0.030   -0.384    0.701   -0.023   -0.023
##     FRENCH   (r08)   -0.030    0.033   -0.918    0.359   -0.049   -0.049
##   COI ~                                                                 
##     SAT       (cs)   -0.382    0.137   -2.781    0.005   -0.205   -0.205
##     AFCOM     (ca)    0.577    0.095    6.074    0.000    0.405    0.405
##     DECO     (c01)   -0.045    0.089   -0.504    0.614   -0.034   -0.034
##     FOOD     (c02)   -0.054    0.132   -0.407    0.684   -0.027   -0.027
##     ATMOS    (c03)    0.141    0.087    1.625    0.104    0.109    0.109
##     PRODQUAL (c04)    0.201    0.157    1.286    0.198    0.087    0.087
##     CHOICE   (c05)   -0.018    0.079   -0.234    0.815   -0.015   -0.015
##     PROF     (c06)   -0.139    0.179   -0.778    0.437   -0.079   -0.079
##     BRAND    (c07)    0.020    0.091    0.224    0.823    0.015    0.015
##     FRENCH   (c08)   -0.131    0.102   -1.284    0.199   -0.079   -0.079
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##  .AFCOM ~~                                                              
##    .SAT               0.214    0.037    5.751    0.000    0.342    0.342
##  .RI ~~                                                                 
##    .COI              -0.006    0.038   -0.159    0.873   -0.008   -0.008
##   DECO ~~                                                               
##     FOOD              0.417    0.050    8.387    0.000    0.417    0.417
##     ATMOS             0.728    0.082    8.912    0.000    0.467    0.467
##     PRODQUAL          0.407    0.051    8.025    0.000    0.470    0.470
##     CHOICE            0.709    0.079    9.021    0.000    0.441    0.441
##     PROF              0.745    0.071   10.543    0.000    0.653    0.653
##     BRAND             0.768    0.076   10.127    0.000    0.516    0.516
##     FRENCH            0.410    0.063    6.478    0.000    0.337    0.337
##   FOOD ~~                                                               
##     ATMOS             0.301    0.051    5.948    0.000    0.295    0.295
##     PRODQUAL          0.256    0.034    7.640    0.000    0.452    0.452
##     CHOICE            0.327    0.050    6.602    0.000    0.311    0.311
##     PROF              0.372    0.043    8.618    0.000    0.498    0.498
##     BRAND             0.317    0.047    6.797    0.000    0.325    0.325
##     FRENCH            0.467    0.047    9.968    0.000    0.586    0.586
##   ATMOS ~~                                                              
##     PRODQUAL          0.369    0.053    7.009    0.000    0.418    0.418
##     CHOICE            0.734    0.084    8.697    0.000    0.448    0.448
##     PROF              0.555    0.068    8.121    0.000    0.477    0.477
##     BRAND             0.784    0.081    9.710    0.000    0.516    0.516
##     FRENCH            0.413    0.065    6.381    0.000    0.333    0.333
##   PRODQUAL ~~                                                           
##     CHOICE            0.435    0.053    8.130    0.000    0.477    0.477
##     PROF              0.342    0.043    7.958    0.000    0.529    0.529
##     BRAND             0.477    0.053    9.033    0.000    0.565    0.565
##     FRENCH            0.210    0.037    5.617    0.000    0.305    0.305
##   CHOICE ~~                                                             
##     PROF              0.719    0.072   10.041    0.000    0.599    0.599
##     BRAND             0.815    0.079   10.358    0.000    0.520    0.520
##     FRENCH            0.290    0.061    4.775    0.000    0.227    0.227
##   PROF ~~                                                               
##     BRAND             0.668    0.066   10.100    0.000    0.600    0.600
##     FRENCH            0.335    0.051    6.540    0.000    0.369    0.369
##   BRAND ~~                                                              
##     FRENCH            0.385    0.061    6.300    0.000    0.325    0.325
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Im3               4.995    0.056   88.568    0.000    4.995    3.786
##    .Im4               4.999    0.057   86.999    0.000    4.999    3.713
##    .Im5               5.036    0.057   87.851    0.000    5.036    3.787
##    .Im10              6.100    0.037  162.775    0.000    6.100    6.936
##    .Im14              6.138    0.037  165.847    0.000    6.138    7.092
##    .Im20              4.672    0.064   73.216    0.000    4.672    3.125
##    .Im21              5.139    0.058   87.977    0.000    5.139    3.750
##    .Im22              4.279    0.065   65.468    0.000    4.279    2.801
##    .Im11              5.653    0.049  115.299    0.000    5.653    4.944
##    .Im12              5.665    0.049  116.160    0.000    5.665    4.986
##    .Im13              5.448    0.052  105.692    0.000    5.448    4.528
##    .Im1               4.792    0.057   84.285    0.000    4.792    3.600
##    .Im2               4.858    0.055   88.412    0.000    4.858    3.780
##    .Im16              5.135    0.052   99.189    0.000    5.135    4.269
##    .Im19              5.145    0.048  107.016    0.000    5.145    4.576
##    .Im17              5.025    0.053   94.556    0.000    5.025    4.042
##    .Im18              4.595    0.060   76.462    0.000    4.595    3.287
##    .Im6               5.827    0.051  113.796    0.000    5.827    4.858
##    .Im7               5.754    0.052  110.825    0.000    5.754    4.756
##    .COM_A1            4.287    0.061   69.767    0.000    4.287    2.984
##    .COM_A2            3.887    0.069   56.694    0.000    3.887    2.421
##    .COM_A3            3.543    0.070   50.854    0.000    3.543    2.178
##    .COM_A4            3.456    0.074   46.684    0.000    3.456    1.992
##    .SAT_1             5.344    0.043  122.984    0.000    5.344    5.240
##    .SAT_2             5.482    0.043  127.792    0.000    5.482    5.457
##    .SAT_3             5.458    0.050  109.431    0.000    5.458    4.773
##    .C_REP1            4.283    0.031  136.297    0.000    4.283    5.807
##    .C_REP2            4.507    0.027  167.714    0.000    4.507    7.166
##    .C_REP3            4.677    0.024  195.460    0.000    4.677    8.381
##    .C_CR1             2.677    0.083   32.290    0.000    2.677    1.384
##    .C_CR2             4.616    0.081   56.955    0.000    4.616    2.477
##    .C_CR3             3.261    0.088   37.119    0.000    3.261    1.583
##    .C_CR4             2.787    0.084   33.098    0.000    2.787    1.414
##     DECO              0.000                               0.000    0.000
##     FOOD              0.000                               0.000    0.000
##     ATMOS             0.000                               0.000    0.000
##     PRODQUAL          0.000                               0.000    0.000
##     CHOICE            0.000                               0.000    0.000
##     PROF              0.000                               0.000    0.000
##     BRAND             0.000                               0.000    0.000
##     FRENCH            0.000                               0.000    0.000
##    .AFCOM             0.000                               0.000    0.000
##    .SAT               0.000                               0.000    0.000
##    .RI                0.000                               0.000    0.000
##    .COI               0.000                               0.000    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Im3               0.214    0.024    8.803    0.000    0.214    0.123
##    .Im4               0.108    0.024    4.482    0.000    0.108    0.059
##    .Im5               0.747    0.049   15.218    0.000    0.747    0.422
##    .Im10              0.118    0.019    6.186    0.000    0.118    0.152
##    .Im14              0.066    0.019    3.519    0.000    0.066    0.088
##    .Im20              0.645    0.060   10.836    0.000    0.645    0.289
##    .Im21              0.711    0.056   12.641    0.000    0.711    0.379
##    .Im22              0.551    0.061    8.972    0.000    0.551    0.236
##    .Im11              0.817    0.055   14.806    0.000    0.817    0.625
##    .Im12              0.311    0.040    7.847    0.000    0.311    0.241
##    .Im13              0.388    0.045    8.700    0.000    0.388    0.268
##    .Im1               0.082    0.048    1.728    0.084    0.082    0.046
##    .Im2               0.308    0.042    7.322    0.000    0.308    0.186
##    .Im16              0.595    0.050   11.791    0.000    0.595    0.411
##    .Im19              0.342    0.043    7.923    0.000    0.342    0.270
##    .Im17              0.092    0.045    2.045    0.041    0.092    0.060
##    .Im18              0.524    0.055    9.577    0.000    0.524    0.268
##    .Im6               0.473    0.054    8.751    0.000    0.473    0.328
##    .Im7               0.148    0.062    2.377    0.017    0.148    0.101
##    .COM_A1            0.760    0.058   13.010    0.000    0.760    0.368
##    .COM_A2            0.801    0.066   12.153    0.000    0.801    0.311
##    .COM_A3            0.868    0.070   12.495    0.000    0.868    0.328
##    .COM_A4            0.860    0.074   11.693    0.000    0.860    0.286
##    .SAT_1             0.275    0.033    8.390    0.000    0.275    0.264
##    .SAT_2             0.321    0.032    9.951    0.000    0.321    0.319
##    .SAT_3             0.798    0.056   14.350    0.000    0.798    0.610
##    .C_REP1            0.178    0.016   11.279    0.000    0.178    0.328
##    .C_REP2            0.052    0.010    4.973    0.000    0.052    0.130
##    .C_REP3            0.131    0.009   14.053    0.000    0.131    0.422
##    .C_CR1             1.096    0.108   10.116    0.000    1.096    0.293
##    .C_CR2             2.646    0.172   15.378    0.000    2.646    0.762
##    .C_CR3             1.313    0.126   10.460    0.000    1.313    0.309
##    .C_CR4             1.387    0.119   11.661    0.000    1.387    0.357
##     DECO              1.526    0.107   14.318    0.000    1.000    1.000
##     FOOD              0.656    0.049   13.292    0.000    1.000    1.000
##     ATMOS             1.590    0.136   11.652    0.000    1.000    1.000
##     PRODQUAL          0.491    0.067    7.334    0.000    1.000    1.000
##     CHOICE            1.690    0.117   14.444    0.000    1.000    1.000
##     PROF              0.852    0.087    9.761    0.000    1.000    1.000
##     BRAND             1.453    0.104   14.011    0.000    1.000    1.000
##     FRENCH            0.966    0.094   10.291    0.000    1.000    1.000
##    .AFCOM             0.872    0.086   10.080    0.000    0.669    0.669
##    .SAT               0.449    0.046    9.730    0.000    0.587    0.587
##    .RI                0.237    0.022   10.963    0.000    0.649    0.649
##    .COI               2.226    0.204   10.924    0.000    0.842    0.842
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     rss1             -0.021    0.010   -2.080    0.038   -0.043   -0.043
##     raa1              0.001    0.009    0.107    0.914    0.002    0.002
##     css1              0.038    0.021    1.802    0.072    0.029    0.029
##     caa1              0.003    0.031    0.108    0.914    0.003    0.003
##     DECOtoRI         -0.012    0.031   -0.380    0.704   -0.024   -0.024
##     DECOtoCOI        -0.004    0.090   -0.040    0.968   -0.003   -0.003
##     rss2              0.019    0.014    1.323    0.186    0.025    0.025
##     raa2              0.009    0.014    0.587    0.557    0.011    0.011
##     css2             -0.034    0.027   -1.232    0.218   -0.017   -0.017
##     caa2              0.028    0.048    0.588    0.557    0.014    0.014
##     FOODtoRI_total    0.065    0.047    1.375    0.169    0.087    0.087
##     FOODtoCOI_totl   -0.059    0.138   -0.430    0.667   -0.029   -0.029
##     rss3              0.008    0.008    0.955    0.339    0.016    0.016
##     raa3              0.064    0.014    4.479    0.000    0.134    0.134
##     css3             -0.014    0.015   -0.914    0.361   -0.011   -0.011
##     caa3              0.214    0.045    4.781    0.000    0.166    0.166
##     ATMOStoRI_totl    0.117    0.029    4.119    0.000    0.245    0.245
##     ATMOStoCOI_ttl    0.341    0.082    4.147    0.000    0.265    0.265
##     rss4             -0.005    0.016   -0.308    0.758   -0.006   -0.006
##     raa4             -0.030    0.018   -1.701    0.089   -0.035   -0.035
##     css4              0.009    0.029    0.307    0.759    0.004    0.004
##     caa4             -0.101    0.059   -1.716    0.086   -0.044   -0.044
##     PQUALtoRI_totl    0.039    0.055    0.700    0.484    0.045    0.045
##     PQUALtoCOI_ttl    0.109    0.161    0.675    0.500    0.047    0.047
##     rss5              0.028    0.010    2.827    0.005    0.061    0.061
##     raa5              0.020    0.009    2.141    0.032    0.042    0.042
##     css5             -0.051    0.024   -2.171    0.030   -0.041   -0.041
##     caa5              0.066    0.030    2.176    0.030    0.053    0.053
##     CHOICEtoRI_ttl    0.034    0.028    1.214    0.225    0.072    0.072
##     CHOICEtCOI_ttl   -0.004    0.081   -0.051    0.959   -0.003   -0.003
##     rss6              0.092    0.027    3.400    0.001    0.140    0.140
##     raa6              0.010    0.018    0.582    0.561    0.016    0.016
##     css6             -0.166    0.067   -2.487    0.013   -0.094   -0.094
##     caa6              0.034    0.058    0.582    0.560    0.019    0.019
##     PROFtoRI_total    0.071    0.058    1.229    0.219    0.108    0.108
##     PROFtoCOI_totl   -0.271    0.168   -1.614    0.106   -0.154   -0.154
##     rss7              0.003    0.009    0.346    0.729    0.006    0.006
##     raa7             -0.000    0.010   -0.017    0.987   -0.000   -0.000
##     css7             -0.006    0.017   -0.345    0.730   -0.004   -0.004
##     caa7             -0.001    0.033   -0.017    0.987   -0.000   -0.000
##     BRANDtoRI_totl   -0.008    0.033   -0.255    0.799   -0.017   -0.017
##     BRANDtoCOI_ttl    0.014    0.094    0.147    0.883    0.010    0.010
##     rss8              0.020    0.011    1.824    0.068    0.033    0.033
##     raa8              0.038    0.013    2.922    0.003    0.061    0.061
##     css8             -0.037    0.023   -1.624    0.104   -0.022   -0.022
##     caa8              0.126    0.042    2.999    0.003    0.076    0.076
##     FRENCHtoRI_ttl    0.028    0.036    0.775    0.438    0.045    0.045
##     FRENCHtCOI_ttl   -0.042    0.104   -0.406    0.685   -0.026   -0.026

local fit measures

lambda = inspect(fit_SEM, what="std")$lambda
theta = inspect(fit_SEM, what="std")$theta
psi = inspect(fit_SEM, what="std")$psi

Indicator reliability criterion (Individual Item Reliability)

# calculate indicator reliabilities (should be larger than 0.4)
indic_rel <- f_indic_rel(lambda, theta)
# pass/fail
indic_rel[[1]]
Result
Individual Item Reliability Fail
# details
indic_rel[[2]]
##         DECO  FOOD ATMOS PRODQU CHOICE  PROF BRAND FRENCH AFCOM   SAT    RI
## Im3    0.877   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im4    0.941   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im5    0.578   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im10     NaN 0.848   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im14     NaN 0.912   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im20     NaN   NaN 0.711    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im21     NaN   NaN 0.621    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im22     NaN   NaN 0.764    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im11     NaN   NaN   NaN  0.375    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im12     NaN   NaN   NaN  0.759    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im13     NaN   NaN   NaN  0.732    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## Im1      NaN   NaN   NaN    NaN  0.954   NaN   NaN    NaN   NaN   NaN   NaN
## Im2      NaN   NaN   NaN    NaN  0.814   NaN   NaN    NaN   NaN   NaN   NaN
## Im16     NaN   NaN   NaN    NaN    NaN 0.589   NaN    NaN   NaN   NaN   NaN
## Im19     NaN   NaN   NaN    NaN    NaN 0.730   NaN    NaN   NaN   NaN   NaN
## Im17     NaN   NaN   NaN    NaN    NaN   NaN 0.940    NaN   NaN   NaN   NaN
## Im18     NaN   NaN   NaN    NaN    NaN   NaN 0.732    NaN   NaN   NaN   NaN
## Im6      NaN   NaN   NaN    NaN    NaN   NaN   NaN  0.672   NaN   NaN   NaN
## Im7      NaN   NaN   NaN    NaN    NaN   NaN   NaN  0.899   NaN   NaN   NaN
## COM_A1   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.632   NaN   NaN
## COM_A2   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.689   NaN   NaN
## COM_A3   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.672   NaN   NaN
## COM_A4   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN 0.714   NaN   NaN
## SAT_1    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN 0.736   NaN
## SAT_2    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN 0.681   NaN
## SAT_3    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN 0.390   NaN
## C_REP1   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN 0.672
## C_REP2   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN 0.870
## C_REP3   NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN 0.578
## C_CR1    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## C_CR2    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## C_CR3    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
## C_CR4    NaN   NaN   NaN    NaN    NaN   NaN   NaN    NaN   NaN   NaN   NaN
##          COI
## Im3      NaN
## Im4      NaN
## Im5      NaN
## Im10     NaN
## Im14     NaN
## Im20     NaN
## Im21     NaN
## Im22     NaN
## Im11     NaN
## Im12     NaN
## Im13     NaN
## Im1      NaN
## Im2      NaN
## Im16     NaN
## Im19     NaN
## Im17     NaN
## Im18     NaN
## Im6      NaN
## Im7      NaN
## COM_A1   NaN
## COM_A2   NaN
## COM_A3   NaN
## COM_A4   NaN
## SAT_1    NaN
## SAT_2    NaN
## SAT_3    NaN
## C_REP1   NaN
## C_REP2   NaN
## C_REP3   NaN
## C_CR1  0.707
## C_CR2  0.238
## C_CR3  0.691
## C_CR4  0.643

Construct reliability criterion

# calculate construct reliability (should be above .6)
construct_rel <- f_construct_rel(lambda,theta)
# pass/fail
construct_rel[[1]]
Result
Construct Reliability Pass
# details
construct_rel[[2]]
##              DECO      FOOD     ATMOS  PRODQUAL    CHOICE      PROF     BRAND
## DECO     0.921565       NaN       NaN       NaN       NaN       NaN       NaN
## FOOD          NaN 0.9360467       NaN       NaN       NaN       NaN       NaN
## ATMOS         NaN       NaN 0.8742496       NaN       NaN       NaN       NaN
## PRODQUAL      NaN       NaN       NaN 0.8285012       NaN       NaN       NaN
## CHOICE        NaN       NaN       NaN       NaN 0.9381434       NaN       NaN
## PROF          NaN       NaN       NaN       NaN       NaN 0.7941162       NaN
## BRAND         NaN       NaN       NaN       NaN       NaN       NaN 0.9103409
## FRENCH        NaN       NaN       NaN       NaN       NaN       NaN       NaN
## AFCOM         NaN       NaN       NaN       NaN       NaN       NaN       NaN
## SAT           NaN       NaN       NaN       NaN       NaN       NaN       NaN
## RI            NaN       NaN       NaN       NaN       NaN       NaN       NaN
## COI           NaN       NaN       NaN       NaN       NaN       NaN       NaN
##            FRENCH     AFCOM       SAT        RI       COI
## DECO          NaN       NaN       NaN       NaN       NaN
## FOOD          NaN       NaN       NaN       NaN       NaN
## ATMOS         NaN       NaN       NaN       NaN       NaN
## PRODQUAL      NaN       NaN       NaN       NaN       NaN
## CHOICE        NaN       NaN       NaN       NaN       NaN
## PROF          NaN       NaN       NaN       NaN       NaN
## BRAND         NaN       NaN       NaN       NaN       NaN
## FRENCH   0.879139       NaN       NaN       NaN       NaN
## AFCOM         NaN 0.8932691       NaN       NaN       NaN
## SAT           NaN       NaN 0.8169017       NaN       NaN
## RI            NaN       NaN       NaN 0.8776212       NaN
## COI           NaN       NaN       NaN       NaN 0.8359885

Average Variance Extracted criterion

# calculate Average Variance Extracted (should be above .5)
AVE <- f_AVE(lambda,theta)
# pass/fail
AVE[[1]]
Result
Average Variance Extracted Pass
# details
diag(AVE[[2]])
##      DECO      FOOD     ATMOS  PRODQUAL    CHOICE      PROF     BRAND    FRENCH 
## 0.7983252 0.8798164 0.6989400 0.6222784 0.8836553 0.6591801 0.8359729 0.7852351 
##     AFCOM       SAT        RI       COI 
## 0.6767299 0.6022341 0.7065602 0.5697335

Construct correlations

# correlations between constructs (factors...) should be lower than .7
construct_cor <- f_construct_corr(psi)
# pass / fail
construct_cor[[1]]
Result
Construct Correlations Pass
# details
construct_cor[[2]]
##            DECO   FOOD  ATMOS PRODQU CHOICE   PROF  BRAND FRENCH  AFCOM    SAT
## DECO      1.000                                                               
## FOOD      0.417  1.000                                                        
## ATMOS     0.467  0.295  1.000                                                 
## PRODQUAL  0.470  0.452  0.418  1.000                                          
## CHOICE    0.441  0.311  0.448  0.477  1.000                                   
## PROF      0.653  0.498  0.477  0.529  0.599  1.000                            
## BRAND     0.516  0.325  0.516  0.565  0.520  0.600  1.000                     
## FRENCH    0.337  0.586  0.333  0.305  0.227  0.369  0.325  1.000              
## AFCOM     0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.669       
## SAT       0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.342  0.587
## RI        0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000
## COI       0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000
##              RI    COI
## DECO                  
## FOOD                  
## ATMOS                 
## PRODQUAL              
## CHOICE                
## PROF                  
## BRAND                 
## FRENCH                
## AFCOM                 
## SAT                   
## RI        0.649       
## COI      -0.008  0.842

Fornell-Larcker Criteria

# AVE should be higher than squared correlations between constructs
fornell_larcker <- f_fornell_larcker(psi,AVE[[2]])
# pass / fail
fornell_larcker[[1]]
Result
Fornell-Larcker Criteria Pass
# details (note: AVE is in the diagonals)
fornell_larcker[[2]]
##           DECO  FOOD ATMOS PRODQU CHOICE  PROF BRAND FRENCH AFCOM   SAT    RI
## DECO     0.798                                                               
## FOOD     0.174 0.880                                                         
## ATMOS    0.218 0.087 0.699                                                   
## PRODQUAL 0.221 0.204 0.175  0.622                                            
## CHOICE   0.195 0.097 0.200  0.228  0.884                                     
## PROF     0.427 0.248 0.228  0.280  0.359 0.659                               
## BRAND    0.266 0.106 0.266  0.320  0.270 0.361 0.836                         
## FRENCH   0.114 0.344 0.111  0.093  0.052 0.136 0.106  0.785                  
## AFCOM    0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.677            
## SAT      0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.117 0.602      
## RI       0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.000 0.707
## COI      0.000 0.000 0.000  0.000  0.000 0.000 0.000  0.000 0.000 0.000 0.000
##            COI
## DECO          
## FOOD          
## ATMOS         
## PRODQUAL      
## CHOICE        
## PROF          
## BRAND         
## FRENCH        
## AFCOM         
## SAT           
## RI            
## COI      0.570

Modification indices

arrange(modificationindices(fit_SEM),-mi) |> filter(mi>10)
##       lhs op    rhs     mi    epc sepc.lv sepc.all sepc.nox
## 1   AFCOM =~ C_REP1 62.289  0.190   0.217    0.294    0.294
## 2  C_REP2 ~~ C_REP3 51.766  0.098   0.098    1.191    1.191
## 3  COM_A1 ~~ COM_A2 27.168  0.260   0.260    0.333    0.333
## 4   BRAND =~   Im13 23.384  0.216   0.261    0.217    0.217
## 5   ATMOS =~ C_REP1 21.217  0.089   0.112    0.152    0.152
## 6    Im11 ~~   Im13 20.467 -0.185  -0.185   -0.329   -0.329
## 7      RI =~  C_CR2 19.220  0.558   0.337    0.181    0.181
## 8   AFCOM =~ C_REP2 18.416 -0.090  -0.102   -0.163   -0.163
## 9  C_REP1 ~~ C_REP3 17.887 -0.054  -0.054   -0.356   -0.356
## 10  BRAND =~   Im12 17.211 -0.178  -0.214   -0.188   -0.188
## 11   Im21 ~~   Im22 14.847 -0.247  -0.247   -0.394   -0.394
## 12 CHOICE =~   Im20 14.223 -0.149  -0.193   -0.129   -0.129
## 13   Im11 ~~   Im12 14.028  0.147   0.147    0.292    0.292
## 14 CHOICE =~   Im13 13.642  0.132   0.172    0.143    0.143
## 15  AFCOM =~   Im11 13.258  0.142   0.163    0.142    0.142
## 16    SAT =~  C_CR2 12.991  0.323   0.283    0.152    0.152
## 17    SAT =~ COM_A2 12.958 -0.242  -0.212   -0.132   -0.132
## 18   FOOD =~   Im11 12.865  0.216   0.175    0.153    0.153
## 19 COM_A3 ~~ C_REP1 12.723  0.076   0.076    0.192    0.192
## 20  AFCOM =~ C_REP3 12.587 -0.069  -0.079   -0.141   -0.141
## 21    SAT =~ C_REP1 11.578  0.107   0.093    0.127    0.127
## 22   Im21 ~~ C_REP3 11.436  0.053   0.053    0.174    0.174
## 23  ATMOS =~   Im12 10.823 -0.113  -0.143   -0.126   -0.126
## 24 CHOICE =~   Im12 10.740 -0.112  -0.145   -0.128   -0.128
## 25   Im13 ~~    Im1 10.491  0.067   0.067    0.373    0.373
## 26 CHOICE =~ C_REP1 10.452  0.055   0.072    0.097    0.097

Discussion

The correlation indeed improves the results and this model is the best we were able to produce.


Path analysis

All elements in the model in alphabetical order

For reference here are all the direct, indirect and total effects in our model in alphabetical order

paramest <- parameterestimates(fit_SEM, boot.ci.type = "bca.simple", standardized = TRUE)

paramest |>
  arrange(label) |> filter(label!="") |>
  stable()
lhs op rhs label est se z pvalue ci.lower ci.upper std.lv std.all std.nox
ATMOStoCOI_total := c03+css3+caa3 ATMOStoCOI_total 0.34 0.08 4.15 0.00 0.18 0.50 0.26 0.26 0.26
ATMOStoRI_total := r03+rss3+raa3 ATMOStoRI_total 0.12 0.03 4.12 0.00 0.06 0.17 0.24 0.24 0.24
BRANDtoCOI_total := c07+css7+caa7 BRANDtoCOI_total 0.01 0.09 0.15 0.88 -0.17 0.20 0.01 0.01 0.01
BRANDtoRI_total := r07+rss7+raa7 BRANDtoRI_total -0.01 0.03 -0.26 0.80 -0.07 0.06 -0.02 -0.02 -0.02
CHOICEtoCOI_total := c05+css5+caa5 CHOICEtoCOI_total 0.00 0.08 -0.05 0.96 -0.16 0.15 0.00 0.00 0.00
CHOICEtoRI_total := r05+rss5+raa5 CHOICEtoRI_total 0.03 0.03 1.21 0.22 -0.02 0.09 0.07 0.07 0.07
DECOtoCOI := c01+css1+caa1 DECOtoCOI 0.00 0.09 -0.04 0.97 -0.18 0.17 0.00 0.00 0.00
DECOtoRI := r01+rss1+raa1 DECOtoRI -0.01 0.03 -0.38 0.70 -0.07 0.05 -0.02 -0.02 -0.02
FOODtoCOI_total := c02+css2+caa2 FOODtoCOI_total -0.06 0.14 -0.43 0.67 -0.33 0.21 -0.03 -0.03 -0.03
FOODtoRI_total := r02+rss2+raa2 FOODtoRI_total 0.07 0.05 1.37 0.17 -0.03 0.16 0.09 0.09 0.09
FRENCHtoCOI_total := c08+css8+caa8 FRENCHtoCOI_total -0.04 0.10 -0.41 0.68 -0.25 0.16 -0.03 -0.03 -0.03
FRENCHtoRI_total := r08+rss8+raa8 FRENCHtoRI_total 0.03 0.04 0.78 0.44 -0.04 0.10 0.04 0.04 0.04
PQUALtoCOI_total := c04+css4+caa4 PQUALtoCOI_total 0.11 0.16 0.67 0.50 -0.21 0.42 0.05 0.05 0.05
PQUALtoRI_total := r04+rss4+raa4 PQUALtoRI_total 0.04 0.06 0.70 0.48 -0.07 0.15 0.04 0.04 0.04
PROFtoCOI_total := c06+css6+caa6 PROFtoCOI_total -0.27 0.17 -1.61 0.11 -0.60 0.06 -0.15 -0.15 -0.15
PROFtoRI_total := r06+rss6+raa6 PROFtoRI_total 0.07 0.06 1.23 0.22 -0.04 0.18 0.11 0.11 0.11
AFCOM ~ DECO a1 0.01 0.05 0.11 0.91 -0.10 0.11 0.01 0.01 0.01
AFCOM ~ FOOD a2 0.05 0.08 0.59 0.55 -0.11 0.21 0.03 0.03 0.03
AFCOM ~ ATMOS a3 0.37 0.05 7.21 0.00 0.27 0.47 0.41 0.41 0.41
AFCOM ~ PRODQUAL a4 -0.18 0.10 -1.79 0.07 -0.37 0.02 -0.11 -0.11 -0.11
AFCOM ~ CHOICE a5 0.11 0.05 2.31 0.02 0.02 0.21 0.13 0.13 0.13
AFCOM ~ PROF a6 0.06 0.10 0.59 0.56 -0.14 0.26 0.05 0.05 0.05
AFCOM ~ BRAND a7 0.00 0.06 -0.02 0.99 -0.11 0.11 0.00 0.00 0.00
AFCOM ~ FRENCH a8 0.22 0.06 3.43 0.00 0.09 0.34 0.19 0.19 0.19
COI ~ DECO c01 -0.04 0.09 -0.50 0.61 -0.22 0.13 -0.03 -0.03 -0.03
COI ~ FOOD c02 -0.05 0.13 -0.41 0.68 -0.31 0.21 -0.03 -0.03 -0.03
COI ~ ATMOS c03 0.14 0.09 1.62 0.10 -0.03 0.31 0.11 0.11 0.11
COI ~ PRODQUAL c04 0.20 0.16 1.29 0.20 -0.11 0.51 0.09 0.09 0.09
COI ~ CHOICE c05 -0.02 0.08 -0.23 0.81 -0.17 0.14 -0.01 -0.01 -0.01
COI ~ PROF c06 -0.14 0.18 -0.78 0.44 -0.49 0.21 -0.08 -0.08 -0.08
COI ~ BRAND c07 0.02 0.09 0.22 0.82 -0.16 0.20 0.02 0.02 0.02
COI ~ FRENCH c08 -0.13 0.10 -1.28 0.20 -0.33 0.07 -0.08 -0.08 -0.08
COI ~ AFCOM ca 0.58 0.09 6.07 0.00 0.39 0.76 0.40 0.40 0.40
caa1 := ca*a1 caa1 0.00 0.03 0.11 0.91 -0.06 0.06 0.00 0.00 0.00
caa2 := ca*a2 caa2 0.03 0.05 0.59 0.56 -0.07 0.12 0.01 0.01 0.01
caa3 := ca*a3 caa3 0.21 0.04 4.78 0.00 0.13 0.30 0.17 0.17 0.17
caa4 := ca*a4 caa4 -0.10 0.06 -1.72 0.09 -0.22 0.01 -0.04 -0.04 -0.04
caa5 := ca*a5 caa5 0.07 0.03 2.18 0.03 0.01 0.12 0.05 0.05 0.05
caa6 := ca*a6 caa6 0.03 0.06 0.58 0.56 -0.08 0.15 0.02 0.02 0.02
caa7 := ca*a7 caa7 0.00 0.03 -0.02 0.99 -0.07 0.06 0.00 0.00 0.00
caa8 := ca*a8 caa8 0.13 0.04 3.00 0.00 0.04 0.21 0.08 0.08 0.08
COI ~ SAT cs -0.38 0.14 -2.78 0.01 -0.65 -0.11 -0.21 -0.21 -0.21
css1 := cs*s1 css1 0.04 0.02 1.80 0.07 0.00 0.08 0.03 0.03 0.03
css2 := cs*s2 css2 -0.03 0.03 -1.23 0.22 -0.09 0.02 -0.02 -0.02 -0.02
css3 := cs*s3 css3 -0.01 0.02 -0.91 0.36 -0.04 0.02 -0.01 -0.01 -0.01
css4 := cs*s4 css4 0.01 0.03 0.31 0.76 -0.05 0.06 0.00 0.00 0.00
css5 := cs*s5 css5 -0.05 0.02 -2.17 0.03 -0.10 0.00 -0.04 -0.04 -0.04
css6 := cs*s6 css6 -0.17 0.07 -2.49 0.01 -0.30 -0.04 -0.09 -0.09 -0.09
css7 := cs*s7 css7 -0.01 0.02 -0.34 0.73 -0.04 0.03 0.00 0.00 0.00
css8 := cs*s8 css8 -0.04 0.02 -1.62 0.10 -0.08 0.01 -0.02 -0.02 -0.02
RI ~ DECO r01 0.01 0.03 0.29 0.77 -0.05 0.07 0.02 0.02 0.02
RI ~ FOOD r02 0.04 0.04 0.87 0.38 -0.05 0.12 0.05 0.05 0.05
RI ~ ATMOS r03 0.05 0.03 1.60 0.11 -0.01 0.10 0.09 0.09 0.09
RI ~ PRODQUAL r04 0.07 0.05 1.45 0.15 -0.03 0.17 0.09 0.09 0.09
RI ~ CHOICE r05 -0.01 0.03 -0.57 0.57 -0.06 0.04 -0.03 -0.03 -0.03
RI ~ PROF r06 -0.03 0.06 -0.53 0.60 -0.15 0.08 -0.05 -0.05 -0.05
RI ~ BRAND r07 -0.01 0.03 -0.38 0.70 -0.07 0.05 -0.02 -0.02 -0.02
RI ~ FRENCH r08 -0.03 0.03 -0.92 0.36 -0.10 0.03 -0.05 -0.05 -0.05
RI ~ AFCOM ra 0.17 0.03 5.51 0.00 0.11 0.23 0.33 0.33 0.33
raa1 := ra*a1 raa1 0.00 0.01 0.11 0.91 -0.02 0.02 0.00 0.00 0.00
raa2 := ra*a2 raa2 0.01 0.01 0.59 0.56 -0.02 0.04 0.01 0.01 0.01
raa3 := ra*a3 raa3 0.06 0.01 4.48 0.00 0.04 0.09 0.13 0.13 0.13
raa4 := ra*a4 raa4 -0.03 0.02 -1.70 0.09 -0.07 0.00 -0.04 -0.04 -0.04
raa5 := ra*a5 raa5 0.02 0.01 2.14 0.03 0.00 0.04 0.04 0.04 0.04
raa6 := ra*a6 raa6 0.01 0.02 0.58 0.56 -0.02 0.04 0.02 0.02 0.02
raa7 := ra*a7 raa7 0.00 0.01 -0.02 0.99 -0.02 0.02 0.00 0.00 0.00
raa8 := ra*a8 raa8 0.04 0.01 2.92 0.00 0.01 0.06 0.06 0.06 0.06
RI ~ SAT rs 0.21 0.05 4.51 0.00 0.12 0.30 0.31 0.31 0.31
rss1 := rs*s1 rss1 -0.02 0.01 -2.08 0.04 -0.04 0.00 -0.04 -0.04 -0.04
rss2 := rs*s2 rss2 0.02 0.01 1.32 0.19 -0.01 0.05 0.03 0.03 0.03
rss3 := rs*s3 rss3 0.01 0.01 0.96 0.34 -0.01 0.02 0.02 0.02 0.02
rss4 := rs*s4 rss4 0.00 0.02 -0.31 0.76 -0.04 0.03 -0.01 -0.01 -0.01
rss5 := rs*s5 rss5 0.03 0.01 2.83 0.00 0.01 0.05 0.06 0.06 0.06
rss6 := rs*s6 rss6 0.09 0.03 3.40 0.00 0.04 0.14 0.14 0.14 0.14
rss7 := rs*s7 rss7 0.00 0.01 0.35 0.73 -0.02 0.02 0.01 0.01 0.01
rss8 := rs*s8 rss8 0.02 0.01 1.82 0.07 0.00 0.04 0.03 0.03 0.03
SAT ~ DECO s1 -0.10 0.04 -2.35 0.02 -0.18 -0.02 -0.14 -0.14 -0.14
SAT ~ FOOD s2 0.09 0.06 1.38 0.17 -0.04 0.21 0.08 0.08 0.08
SAT ~ ATMOS s3 0.04 0.04 0.97 0.33 -0.04 0.11 0.05 0.05 0.05
SAT ~ PRODQUAL s4 -0.02 0.07 -0.31 0.76 -0.17 0.12 -0.02 -0.02 -0.02
SAT ~ CHOICE s5 0.13 0.04 3.48 0.00 0.06 0.21 0.20 0.20 0.20
SAT ~ PROF s6 0.43 0.08 5.30 0.00 0.27 0.60 0.46 0.46 0.46
SAT ~ BRAND s7 0.02 0.04 0.35 0.73 -0.07 0.10 0.02 0.02 0.02
SAT ~ FRENCH s8 0.10 0.05 1.98 0.05 0.00 0.19 0.11 0.11 0.11

QUESTION 2

Direct effects

Below we list all significant (p-value < 0.05) direct effects in our model ordered by effect size for each endogenous variable.

filter(paramest,nchar(paramest[,"label"]) %in% c(2,3), pvalue<0.05) |> 
  arrange(lhs, -std.all) |> 
  stable()
lhs op rhs label est se z pvalue ci.lower ci.upper std.lv std.all std.nox
AFCOM ~ ATMOS a3 0.37 0.05 7.21 0.00 0.27 0.47 0.41 0.41 0.41
AFCOM ~ FRENCH a8 0.22 0.06 3.43 0.00 0.09 0.34 0.19 0.19 0.19
AFCOM ~ CHOICE a5 0.11 0.05 2.31 0.02 0.02 0.21 0.13 0.13 0.13
COI ~ AFCOM ca 0.58 0.09 6.07 0.00 0.39 0.76 0.40 0.40 0.40
COI ~ SAT cs -0.38 0.14 -2.78 0.01 -0.65 -0.11 -0.21 -0.21 -0.21
RI ~ AFCOM ra 0.17 0.03 5.51 0.00 0.11 0.23 0.33 0.33 0.33
RI ~ SAT rs 0.21 0.05 4.51 0.00 0.12 0.30 0.31 0.31 0.31
SAT ~ PROF s6 0.43 0.08 5.30 0.00 0.27 0.60 0.46 0.46 0.46
SAT ~ CHOICE s5 0.13 0.04 3.48 0.00 0.06 0.21 0.20 0.20 0.20
SAT ~ FRENCH s8 0.10 0.05 1.98 0.05 0.00 0.19 0.11 0.11 0.11
SAT ~ DECO s1 -0.10 0.04 -2.35 0.02 -0.18 -0.02 -0.14 -0.14 -0.14

Drivers of satisfaction and affective commitment

In order of effect size: Professionalism, Choice Range, Frenchness and Decoration are all significant drivers of Customer Satisfaction with Professionalism and Choice Range being the biggest.

In turn, Relaxed atmosphere, Frenchness and Choice Range and are all significant drivers of Affective Commitment.

Interestingly, Food and Brand image are not significant drivers of either Customer Satisfaction or Affective Commitment.

We also notice that Decoration has a significant negative effect on Customer Satisfaction. We are not sure why this would be the case and this should be investigated further.

Mediators and outcomes

Looking again at the list of direct effects above, we notice that Customer Satisfaction and Affective Commitment are the only significant variables for both outcomes Repurchase intention and Co-creation intention, and surprisingly, there are no significant direct effects of perception dimensions on the outcomes (details in next table below).

As analysed in the previous section, perception variables are on the other hand significant drivers of Customer Satisfaction and Affective Commitment (but not all of them).

This suggests that Customer Satisfaction and Affective Commitment are indeed mediating the impact of image perceptions on outcomes.

It is again interesting to look at the negative effects. Customer Satisfaction has a big negative effect on Co-creation Intention, which makes sense as satisfied customers might not have any need to improve anything. As we already mentioned in the previous section, Decoration has a negative effect on Satisfaction and we are not sure why this is the case.

Let us look at direct effects of perception dimensions on the outcomes without excluding insignificant results, none are significant but it is still interesting to see which dimensions might have a direct effect on outcomes. Here they are ranked in order of significance:

filter(paramest,nchar(paramest[,"label"]) %in% c(3)) |> 
  arrange(pvalue) |> 
  stable()
lhs op rhs label est se z pvalue ci.lower ci.upper std.lv std.all std.nox
COI ~ ATMOS c03 0.14 0.09 1.62 0.10 -0.03 0.31 0.11 0.11 0.11
RI ~ ATMOS r03 0.05 0.03 1.60 0.11 -0.01 0.10 0.09 0.09 0.09
RI ~ PRODQUAL r04 0.07 0.05 1.45 0.15 -0.03 0.17 0.09 0.09 0.09
COI ~ PRODQUAL c04 0.20 0.16 1.29 0.20 -0.11 0.51 0.09 0.09 0.09
COI ~ FRENCH c08 -0.13 0.10 -1.28 0.20 -0.33 0.07 -0.08 -0.08 -0.08
RI ~ FRENCH r08 -0.03 0.03 -0.92 0.36 -0.10 0.03 -0.05 -0.05 -0.05
RI ~ FOOD r02 0.04 0.04 0.87 0.38 -0.05 0.12 0.05 0.05 0.05
COI ~ PROF c06 -0.14 0.18 -0.78 0.44 -0.49 0.21 -0.08 -0.08 -0.08
RI ~ CHOICE r05 -0.01 0.03 -0.57 0.57 -0.06 0.04 -0.03 -0.03 -0.03
RI ~ PROF r06 -0.03 0.06 -0.53 0.60 -0.15 0.08 -0.05 -0.05 -0.05
COI ~ DECO c01 -0.04 0.09 -0.50 0.61 -0.22 0.13 -0.03 -0.03 -0.03
COI ~ FOOD c02 -0.05 0.13 -0.41 0.68 -0.31 0.21 -0.03 -0.03 -0.03
RI ~ BRAND r07 -0.01 0.03 -0.38 0.70 -0.07 0.05 -0.02 -0.02 -0.02
RI ~ DECO r01 0.01 0.03 0.29 0.77 -0.05 0.07 0.02 0.02 0.02
COI ~ CHOICE c05 -0.02 0.08 -0.23 0.81 -0.17 0.14 -0.01 -0.01 -0.01
COI ~ BRAND c07 0.02 0.09 0.22 0.82 -0.16 0.20 0.02 0.02 0.02

Relaxed Atmosphere is the perception variable with the most significant direct effect on the two business outcomes of interest. But again, none of these are significant results.

QUESTION 3

Effects of perception on outcomes

We have already established that perception dimensions do not have significant direct effects on outcomes but this does not mean that they do not have an effect through the mediators of Customer Satisfaction and Affective Commitment. This is what we look at here.

Below we list all significant (pvalue < 0.05) direct, indirect and total effects of perception dimensions on outcomes ordered by effect size (std.all).

filter(paramest,nchar(paramest[,"label"])>2, pvalue<0.05) |> 
  arrange(-std.all) |> 
  stable()
lhs op rhs label est se z pvalue ci.lower ci.upper std.lv std.all std.nox
ATMOStoCOI_total := c03+css3+caa3 ATMOStoCOI_total 0.34 0.08 4.15 0.00 0.18 0.50 0.26 0.26 0.26
ATMOStoRI_total := r03+rss3+raa3 ATMOStoRI_total 0.12 0.03 4.12 0.00 0.06 0.17 0.24 0.24 0.24
caa3 := ca*a3 caa3 0.21 0.04 4.78 0.00 0.13 0.30 0.17 0.17 0.17
rss6 := rs*s6 rss6 0.09 0.03 3.40 0.00 0.04 0.14 0.14 0.14 0.14
raa3 := ra*a3 raa3 0.06 0.01 4.48 0.00 0.04 0.09 0.13 0.13 0.13
caa8 := ca*a8 caa8 0.13 0.04 3.00 0.00 0.04 0.21 0.08 0.08 0.08
rss5 := rs*s5 rss5 0.03 0.01 2.83 0.00 0.01 0.05 0.06 0.06 0.06
raa8 := ra*a8 raa8 0.04 0.01 2.92 0.00 0.01 0.06 0.06 0.06 0.06
caa5 := ca*a5 caa5 0.07 0.03 2.18 0.03 0.01 0.12 0.05 0.05 0.05
raa5 := ra*a5 raa5 0.02 0.01 2.14 0.03 0.00 0.04 0.04 0.04 0.04
css5 := cs*s5 css5 -0.05 0.02 -2.17 0.03 -0.10 0.00 -0.04 -0.04 -0.04
rss1 := rs*s1 rss1 -0.02 0.01 -2.08 0.04 -0.04 0.00 -0.04 -0.04 -0.04
css6 := cs*s6 css6 -0.17 0.07 -2.49 0.01 -0.30 -0.04 -0.09 -0.09 -0.09

Looking at this ranking we see that Relaxed Atmosphere has the biggest total effect on both Co-creation Intention and Repurchase Intention due mainly to the big indirect effect through Affective Commitment (caa3 and raa3). There are no other dimensions with a significant total effect on outcomes.

Some dimensions do have significant and non-negligeable indirect effects on outcomes though. Professionalism has a non negligeable indirect effect on Repurchase Intention through Customer Satisfaction (rss6) as has Frenchness on Co-creation Intention through Affective Commitment (caa8).

We also notice some dimensions that have small negative indirect effects: 1. Choice range and Professionalism on Co-creation Intention through Customer Satisfaction (css5 and css6 respectively) 2. Decoration on Repurchase Intention through Customer Satisfaction (rss1).

For the first two, Choice range and Professionalism, this is due to the (large) and significant negative effect of Customer Satisfaction on Co-creation intention, which as mentioned makes sense because if people are satisfied they won’t want to change things. The last one (rss1) is due to the negative effect of Decoration on Customer Satisfaction, which is as already mentioned, a bit puzzling.

The largest negative effect (css6) is on outcome Co-creation intention and due to the Professionalism dimension, which again makes sense, people will not be likely to want to get involved if they feel the organization is already very professional.